Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::vector, std::pair<std::pair> unperformant?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.03.2007, 15:45 Uhr
xXx
Devil


also ... ich hab mir für eine Tabelle jetzt mal einfach folgendes zusammen gesetzt:

C++:
std::vector< std::pair <unsigned short, std::pair<unsigned short, std::string> > > m_items;
wobei das 1. unsigned short die id des items und das 2. unsigned short die id der columne ist ... aber das ist sicherlich nicht sonderlich performant ... aber für jedes item nen neuen std::vector, in den man dann den string fürs heading reinpackt, ist auch nicht das ware, oder?
also
[code]caption1 | caption2 | caption3
std::vector<string> mit items
std::vector<string> mit items [/cpp]

C++:
std::vector< std::vector<std::string> > m_items;
wie würdet ihr das machen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.03.2007, 17:04 Uhr
Blubber2063



Warum legst du das in einem Vector ab, brauchst du die Struktur so, sonst benutz doch einfach

C++:
std::map<unsigned short, std::pair<unsigned short, std::string>> m_items;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.03.2007, 17:44 Uhr
stephanw
localhorst


Wie willst Du denn auf Deine Tabelle zugreifen können ? Mit Zeilen und Spalten-Index oder wie ?
--
Reden ist Schweigen und Silber ist Gold.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.03.2007, 18:50 Uhr
xXx
Devil


hmm ja man muss halt noch werte durch spalten und zeilen angabe verändern können ... und auch hinzufügen können ...
@Blubber: Wo siehst du da jetzt den Vorteil? Bis auf das ein std::pair wegfällt? hmm aber stimmt so könnte man es auch machen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.03.2007, 18:56 Uhr
xXx
Devil


achja ... bei der Map hab ich auch das Problem ... wenn ich ne InsertItem Funktion schreib ... bei der man natürlich NICHT angeben muss, was es denn jetzt für eine Zeile ist ... soll, wenn das Element in der entsprechenden Zeile noch nicht voll ist, das gefüllt werden ... ob das so sinnvoll ist, lässt sich drüber diskutieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.03.2007, 18:58 Uhr
Blubber2063



Ne hast recht, hab nicht richtig drüber nachgedacht, ist nicht schneller, du kennst ja anscheinend immer beide indizes, allerdings solltest du dann bei deiner Variante mit dem Vector<Vector> bleiben solltest, wenn du da nen Pair benutzt, dann hast du ja immer den zusätzlichen Aufwand für den selector.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.03.2007, 19:00 Uhr
xXx
Devil


und das geht auch aus dem einfachen Grund nicht, da man dann nicht hingehen kann und die anzahl von Zeilen so einfach ausließt ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
08.03.2007, 19:06 Uhr
Blubber2063



Warum nicht, nimm einfach von einem beliebigen Vektor den Inhalt, also size wenn ich mich grad nicht irre, je nach dem ob der erste Vector die Zeilen oder die Spalten enthält.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
08.03.2007, 19:17 Uhr
stephanw
localhorst


Ich wäre für so etwas hier:


C++:

template<class Element>
class Table
{
public:
  Table(size_t rows, size_t cols);
  
  void insert( size_t row, size_t col, Element item );
  const Element& get( size_t row, size_t col ) const;
  ...
private:
  std::vector< std::vector< Element > > tableData_;
};



Und wie Du das intern machst, kannst Du dann variieren. Für den Anfang könnte ein std::vector< std::vector<Element> > doch funktionieren.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 08.03.2007 um 19:18 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
08.03.2007, 21:03 Uhr
0xdeadbeef
Gott
(Operator)


www.boost.org/libs/multi_array/doc/index.html
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: