C2784 с использованием набора итераторов над картой - PullRequest
1 голос
/ 05 сентября 2011

приведенный ниже код вызывает ошибку компилятора C2784:

'bool std :: operator <(const std :: _ Tree <_Traits> &, const std :: _ Tree <_Traits> &)': не удалось вывестиаргумент шаблона для 'const std :: _ Tree <_Traits> &' from 'const std :: _ Tree_iterator <_Mytree>'

Что не так с кодом?Спасибо заранее;В этом сообщении об ошибке я не нашел ни одной записи, которая бы мне помогла.

#include <map>
#include <set>

void main(){
int i=1;
     std::map<int, int> A;
A[i]=i;
std::set<std::map<int, int>::iterator > setOfIts;
setOfIts.insert(A.begin());
}

1 Ответ

0 голосов
/ 05 сентября 2011

То, что вы видите, - это долгий путь жаловаться Visual Studio, что у него нет возможности сравнивать итераторы, которые вы хотите разместить в наборе, потому что нет подходящего operator <. И поскольку он не может сравнивать их, он не может решить, имеют ли два итератора одинаковое значение, поэтому в наборе должен быть только один из них.

Чтобы решить эту проблему, вы можете предоставить собственный оператор менее чем - см. Пример здесь . Какой смысл в равенстве итераторов решать вам ...

...