Вы можете использовать кортеж вместо пары < междунар, пара>? (Смотрите в конце ответа)
Если вы не можете (потому что вы не используете C++ 11), использовать поиск с парами, вам не нужны ваши компараторов:
typedef pair<int,pair<int,int>> my_type;
typedef set<my_type> set_of_mytype;
set_of_mytype myset;
myset.insert(make_pair(1,make_pair(3,4)));
set_of_mytype::iterator search1 = myset.find(make_pair(1,make_pair(5,4)));
set_of_mytype::iterator search2 = myset.find(make_pair(1,make_pair(3,4)));
if(search1 != myset.end())
cout << "search 1: (1,(5,4)) found !" << endl;
if(search2 != myset.end())
cout << "search 2: (1,(3,4)) found !" << endl;
cout << " Size of the set with only (1,(3,4)) in it : "<< myset.size() << endl;
myset.insert(make_pair(3,make_pair(1,4)));
cout << " Size of the set with only (1,(3,4)) and (3,(1,4)) in it : "<< myset.size() << endl;
Выведет:
поиск 2: (1, (3,4)) найдено!
Размер набора только с (1, (3,4)) в нем: 1
Размер набора только с (1, (3,4)) и (3, (1,4)) в нем: 2
Так что для вашего первого вопроса: без пользовательского компаратора это работает.
Для второго, если вы пытаетесь вставить снова:
myset.insert(make_pair(1,make_pair(3,4)));
cout << " Size of the set is still : "<< myset.size() << endl;
Выход
Размер набора по-прежнему: 2
Так что "различимость" будет присутствовать здесь.
Если вы компилируете с C++ 11, которые можно использовать кортежи:
typedef tuple <int,int,int> my_type2;
typedef set<my_type2> set_of_tuples;
set_of_tuples myset2;
myset2.insert(make_tuple(1,3,4));
ваш код будет проще: написание make_tuple (1,3,4) проще, чем make_pair (1 , make_pair (3,4)). Plus acessing элемент с этим будет проще: `find` функция член
set_of_tuples::iterator it = my_set.find(make_tuple(1,3,4))
my_type2 my_element = *it
cout << get<0>(my_element) << "," << get<1>(my_element) << "," get<2>(my_element) << endl;
использовать' STD :: set' в. – juanchopanza
внедрение 'set' или его использование? – Yakk
Я не могу использовать напрямую find(), Its дает Error. :(.. Я думаю, нам нужно передать компаратор в нем ... – CoderBoy