Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wskazanie największego elementu z wektora struktur

Ostatnio zmodyfikowano 2013-02-25 14:07
Autor Wiadomość
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 :
C/C++
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 :

C/C++
blocks.maxElement( mapz ); //jeśli mapz w blocks[8] jest ma największą wartość to zwraca 8 itd...
Proszę o pomoc( na google nic nie znalazłem ).
P-76887
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()
P-76888
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 ?
P-76889
Monika90
» 2013-02-24 15:12:36
Proszę:
C/C++
#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.
P-76891
intothenether
Temat założony przez niniejszego użytkownika
» 2013-02-24 15:17:57
Aha, dziękuje temat do zamknięcia :D
P-76892
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?
P-76902
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().
P-76903
crash
» 2013-02-25 13:53:18
Poza tym z vector'a można korzystać jak z tablicy:

C/C++
pseudeokod !

vector < costam > vc;

vc.push_back( cos ); iles tam razy
...

costam cos1 = vc[ 5 ];
P-76933
« 1 » 2
  Strona 1 z 2 Następna strona