Ik probeer te controleren of een bepaalde sleutel in een map zit en ik kan het niet:
typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
dus hoe kan ik afdrukken wat er in p staat?
Ik denk dat je map::find
wilt. Als m.find("f")
gelijk is aan m.end()
, dan is de sleutel niet gevonden. Anders geeft find een iterator terug die wijst naar het gevonden element.
De fout komt omdat p.first
een iterator is, die'niet werkt voor stream insertion. Verander je laatste regel in cout << (p.first)->first;
. p
is een paar iterators, p.first
is een iterator, p.first->first
is de key string.
Een map kan nooit meer dan één element hebben voor een gegeven sleutel, dus equal_range
is'niet erg nuttig. Het'is gedefinieerd voor map, omdat het'is gedefinieerd voor alle associatieve containers, maar het'is veel interessanter voor multimap.