Пользовательская функция сравнения для std :: multimap, когда ключи равны

Я хотел бы написать собственный компаратор для 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?

1

Решение

Что я хотел бы сделать, это сравнить ключи, в случае, если они
равны, затем сравните значения.

Нет, вы не можете сделать сравнение для 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 На первом месте в вышеуказанной проблеме.

Увидеть Быстрый онлайн тест здесь

Vector-Sort Vs Multimap-Insertion

2

Другие решения

Вы можете достичь желаемого эффекта с std::multiset<std::tuple<int, int>>, Пользовательский компаратор не нужен, потому что std::tuple использует лексикографическое сравнение (то, которое вы пытаетесь реализовать).

1

По вопросам рекламы [email protected]