Почему set <string>:: iterator не может использоваться в качестве ключа карты? - PullRequest
0 голосов
/ 10 августа 2011

У меня есть такой код:

set<string>::iterator it1;
set<string>::iterator it2;
pair<set<string>::iterator,bool> ret;

set<string> s;
ret = s.insert("bbbb1");
it1 = ret.first;

ret = s.insert("bbbb2");
it2 = ret.first;

map<set<string>::iterator, set<string>::iterator> m;

m.insert(make_pair(it1,it2));

но последняя строка "m.insert (make_pair (it1, it2));" не удалось ..

1 Ответ

8 голосов
/ 10 августа 2011

std::set итераторы не являются итераторами с произвольным доступом, поэтому они не менее сопоставимы.

Тип, который вы используете в качестве ключа в std::map, должен иметь возможность сортировки с использованием строгий слабый порядок .По умолчанию std::map использует < для заказа ключей.Вы можете изменить это поведение, предоставив компаратор при определении типа std::map.Возможно, вы захотите выполнить некоторое реляционное сравнение, используя объект, на который указывает итератор.

...