Daten aus struct in STL-Container kopieren
-
Hallo,
ich habe ein struct mit diversen Einträgen deklariert und im Laufe eines Programms mit Werten gefüllt. Das struct sieht folgendermassen aus:
typedef struct _KLT_Feature { int id; //!< Unique identifier for feature. int status; //!< Usage status of feature. float row; //!< Current row of feature. float col; //!< Current column of feature. /* ... */ } KLT_FEATURE, * PTR_KLT_FEATURE; typedef struct _KLT_Feature_List { int count; //!< Number of features in list. PTR_KLT_FEATURE features; //!< A field of features. } KLT_FEATURE_LIST, * PTR_KLT_FEATURE_LIST;Jetzt würde ich gerne einige der Daten der Liste kopieren. Am besten wäre eine Liste bestehend aus <id, status, row, col>. Gibt es eine Möglichkeit, solch eine Liste mit den Mitteln der STL anzulegen?
Gruß, mbu.
EDIT: Wenn ich schon dabei bin, hier noch eine Frage diesbezüglich: Aus dem Konstrukt, welches oben entsteht möchte ich eine dreispaltige Liste berechnen nach der Art <row, col, angle> und diese Liste dann nach der dritten Spalte sortieren. Mir ist klar, dass ich mir da auch eine eigene Klasse schreiben könnte, die Frage ist nur, ob das mit den STL-Containern irgendwie schneller und problemloser funktioniert?
-
wenn ich dich richtig verstanden habe, willst du eine liste erstellen, deren einzelne elemente aus je vier (bzw. drei) verschiedenen einzelteilen bestehen. richtig?
da böte sich std::tr1::tuple in verbindung mit std::list an.
#include <tr1/tuple> #include <list> typedef std::tr1::tuple<int, int, float, float> feature_t; int main () { std::list<feature_t> feature_list; feature_list.push_back (std::tr1::make_tuple(1, 2, 3.4, 5.6)); feature_t feature(0, 1, 2.3, 4.5); std::cout << std::tr1::get<2>(feature) << '\n'; //mit get<X>(tuple) auf das X. element eines tuples zugreifen }mit einem schnell zusammengebauten functor ist es auch kein problem, die liste nach belieben zu sortieren:
template <int Sort> struct sort_by_element { template <class Tuple> bool operator () (Tuple const& a, Tuple const& b) { return get<Sort>(a) < get<Sort>(b); } }; //... feature_list.sort (sort_by_element<3>());zufrieden?
-
Super, hab das gerade mal an mein Projekt angepasst. Funktioniert einwandfrei. Kann mir jemand vielleicht noch sagen, wie ich, ausser durch durchzählen, auf das mittlere Element einer list zugreife?
-
Was besseres fällt mir auch net ein
list<T> l; ... size_t size = l.size(); size_t mittlerePosition = size / 2; list<T>::iterator iter = l.begin(); iter.advance(mittlerePosition - 1); // iter zeigt nun auf das mittlere Element