2017-01-23 12 views
-3

У меня есть два набора, Set1, Set2. Оба являются наборами пар (pair <int,int>).Компараторы пользовательских наборов для набора пар в C++

Теперь Set1, я хочу компаратор как

set1Comparator(pair p1, pair p2) 
{ 
     if(p1.first != p2.first) 
       return p1.first < p2.first; 
     else 
       return p1.second < p2.second; 
} 

И Set2, я хочу компаратор как

set2Comparator(pair p1, pair p2) 
{ 
     if(p1.first != p2.first) 
       return p1.first > p2.first; 
     else 
       return p1.second > p2.second; 
} 

Пожалуйста, помогите. FYI, я проверил так много ссылок на C++ set compator, но ни один из них не помог мне определить set-comparator для специфический. (Означает, если я определяю один компаратор для набора пар, тогда set1 и set2 будут использовать одинаковые компаратор, где set1 и set2 - пары).

+0

Конструктор для std :: set принимает функцию сравнения в качестве параметра - см. Http://en.cppreference.com/w/cpp/container/set/set –

+0

@Neil Спасибо :) –

+0

Я никогда не понимал смысла в такие вопросы .. _I проверил так много ссылок на C++ set comparator_ Но почему вы не проверили документацию (связанную с Нилом)? Это ваше первое место, если вы хотите узнать, поддерживает ли определенный класс определенные функции. –

ответ

1

Всякий раз, когда вы объявляете зЬй :: набор можно указать класс сравнения, как

std::set< std::pair<foo,bar>, set1Comparator > myset1; 

, а затем для другого набора:

std::set< std::pair<foo,bar>, set2Comparator > myset2; 

так просто: D

+0

Спасибо, я не знал, я могу это сделать. Я попробую и дам вам знать :) –