Wie kann ich einen struct als Schlüssel in einer std::map?

Ich habe folgenden code, aber ich bekomme eine Fehlermeldung auf der letzten Zeile:

struct coord { 
    int x, y; 

    bool operator=(const coord &o) {
        return x == o.x && y == o.y;
    }

    bool operator<(const coord &o) {
        return x < o.x || (x == o.x && y < o.y);
    }
};

map<coord, int> m;
pair<coord, int> p((coord{0,0}),123);
m.insert(p); //ERROR here

Wie kann ich eine Struktur, die als Schlüssel in einer map?


Habe ich versucht den code zu ändern, um diese:

struct coord { 
    int x, y; 

    bool const operator==(const coord &o) {
        return x == o.x && y == o.y;
    }

    bool const operator<(const coord &o) {
        return x < o.x || (x == o.x && y < o.y);
    }
};

Aber ich bin noch immer der folgende Fehler:

C:\Users\tomc\Desktop\g>mingw32-make g++ test.cpp -std=c++0x " In Datei
im Lieferumfang enthalten aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/string:5 0:0,
aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/loc
ale_classes.h:42,
aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/ios
_base.h:43,
aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/ios:43,
aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/ostream: 40,
aus
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/iostream :40,
aus dem test.cpp:1:
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_function.h:
In member function " bool std::less<_Tp>::operator()(const _Tp& const
_Tp&) const [with _ Tp = coord]':
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h:1184:4:
inst antiated von 'std::pair-bool>
std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare,
_Alloc>::_M_insert_unique(const _Val&) [mit _Key
= coord, _Val = std::pair _KeyOfValue =
std::_Select1st >, _Compare =
std::less, _Alloc = std::allocator>]'
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_map.h:501:41:
insta ntiated von 'std::pair, std::_Select1st >, _Compare, typename _Alloc::rebind ::value_type>::andere>::iterator, bool> std
::map<_Key, _Tp, _Compare, _Alloc>::insert(const std::map<_Key, _Tp,
_Compare, _ Alloc>::value_type&) [mit _Key = coord, _Tp = int,
_Compare = std::less, _Alloc = std::allocator >, typename std::_Rb_tree<_ - Schlüssel, std::pair, std::_Select1st >, _ Vergleichen,
typename _Alloc::rebind::value_ty pe - >::andere>::iterator =
std::_Rb_tree_iterator >, st d::map<_Key,
_Tp, _Compare, _Alloc>::value_type = std::pair]'
test.cpp:56:12: instanziiert von hier
c:\mingw\bin../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_function.h:230:22:
er ror: passing 'const coord' as 'this' argument of 'const bool
coord::operator<(co nst coord&)' discards qualifiers mingw32-make: ***
[Spiel] Fehler 1

  • Welche Fehler haben Sie?
  • Das ist nicht Ihr problem, sondern Ihre operator= muss operator==
  • Es sollte bool operator<(const coord &o) const
  • const an der falschen Stelle, nach der argument-Liste nicht vor. Was du getan hast macht der Rückgabetyp const d.h. const bool, aber Sie wollen die Methode const.
  • Lesen Sie die Operator Überladen FAQ-Eintrag. In der Tat, diese sollten geschlossen werden, wie ein dupe, denn es ist alles dort erklärt.
InformationsquelleAutor | 2011-08-26
Schreibe einen Kommentar