[C++] Wskazanie największego elementu z wektora struktur
Ostatnio zmodyfikowano 2013-02-25 14:07
intothenether Temat założony przez niniejszego użytkownika |
[C++] Wskazanie największego elementu z wektora struktur » 2013-02-24 14:19:28 Witam, mam taki problem że muszę znaleźć index wektora typu struct zawierającego największą zmienną typu int. Deklaracja tej struktury i wektora wygląda tak : struct Tile { int x, y, z, mapx, mapy, mapz; bool high; bool NonSelectable; };
vector < Tile > blocks;
Cały kod działa poprawnie, lecz problem w tym że potrzebuję jakieś funkcji która zwracałaby index wektora w którym znajduję się największa zmienna struktury Tile. Chodzi o coś w tym stylu : blocks.maxElement( mapz );
Proszę o pomoc( na google nic nie znalazłem ). |
|
Monika90 |
» 2013-02-24 14:29:14 Najpierw musisz zdefiniować sposób porónywania wartości typu Tile np. operator <() , albo wolno stojąca funkcja, albo obiekt funkcyjny, doraźnie można by użyć lambdy. A potem używasz algorytmu std::max_element() |
|
intothenether Temat założony przez niniejszego użytkownika |
» 2013-02-24 14:48:19 Hmm.. Nie do końca rozumiem :/ Czy mógłbym prosić o jakiś przykład ? |
|
Monika90 |
» 2013-02-24 15:12:36 Proszę: #include <algorithm>
bool cmp_by_mapx( const Tile & t1, const Tile & t2 ) { return t1.mapx < t2.mapx; }
std::max_element( blocks.begin(), blocks.end(), cmp_by_mapx );
max_element zwraca iterator do pierwszego maksymalnego elementu, albo blocks.end() gdy blocks jest pustym wektorem. |
|
intothenether Temat założony przez niniejszego użytkownika |
» 2013-02-24 15:17:57 Aha, dziękuje temat do zamknięcia :D |
|
intothenether Temat założony przez niniejszego użytkownika |
» 2013-02-24 18:13:01 std::vector < Tile, std::allocator < Tile >>::iterator maxElement = std::max_element( izo::blocks.begin(), izo::blocks.end() ); Mam coś takiego i chciałbym z tego iteratora pobrać index. Czy to możliwe? |
|
pekfos |
» 2013-02-24 18:53:29 Vector ma iteratory dostępu swobodnego, więc można na nich działać jak na wskaźnikach. Odejmij od maxElement iterator zwrócony przez metodę begin(). |
|
crash |
» 2013-02-25 13:53:18 Poza tym z vector'a można korzystać jak z tablicy: pseudeokod !
vector < costam > vc;
vc.push_back( cos ); iles tam razy ...
costam cos1 = vc[ 5 ];
|
|
« 1 » 2 |