Я хотел бы написать собственный компаратор для std::multimap
, Что я хотел бы сделать, это сравнить ключи, если они равны, то сравните ценности. Я пытаюсь сделать это, перегружая operator()
в структуре и передачи объекта функции в качестве третьего параметра в std::multimap
конструктор.
struct CustomComp {
bool operator()(int key_lhs, int key_rhs){
if (key_lhs < key_rhs) return true;
if (key_lhs == key_rhs) //Check values;
else return false;
}
};
multimap<int, int, CustomComp> myMap;
Как я могу получить доступ к значениям, а не только к ключам, если оба являются int?
Что я хотел бы сделать, это сравнить ключи, в случае, если они
равны, затем сравните значения.
Нет, вы не можете сделать сравнение для std::multimap
в соответствии с ценности.
Я бы предложил использовать std::vector< std::pair<int, int> >
вместо этого и просто сортировать. оператор< из std::pair
позаботится о том, что вы хотите.
std::vector< std::pair<int, int> > vec{ {1,2}, {1,-1},{ 2,2 } ,{ -1,1 } };
std::sort(std::begin(vec), std::end(vec));
Обновить: После прочтения другого ответа (т.е. std::multiset<std::tuple<int, int>>
) Я думал о том, насколько std::multiset::insert
,
Затем я придумал следующий тест, который показывает, почему std::vector
На первом месте в вышеуказанной проблеме.
Увидеть Быстрый онлайн тест здесь
Вы можете достичь желаемого эффекта с std::multiset<std::tuple<int, int>>
, Пользовательский компаратор не нужен, потому что std::tuple
использует лексикографическое сравнение (то, которое вы пытаетесь реализовать).