Я хотел бы создать пользовательскую функцию сравнения для отправки в find_if
или другую функцию сравнения, которая для сравнения равенства требует, чтобы я игнорировал определенные ключи.
У меня есть набор, который содержит неупорядоченную карту. Давайте назовем это vecMap. vecMap выглядит как std::vector<std::unordered_map<std::pair<int, bool>, int>>
.
В моем сценарии я хочу, чтобы два std::unordered_map<std::pair<int, bool>, int>
были равны тогда и только тогда, когда ключи, второе значение которых не равно true
, равны. Например,
Например,
Содержимое MapOne:
Keys | Values
{1, false} | 10
{2, true} | 15
Содержимое MapTwo:
Keys | Values
{1, false} | 10
Эти две карты считаются равными, поскольку мы заботимся только о равенстве ключей, для которых key.second равно false.
Другой пример,
Содержимое MapOne:
Keys | Values
{1, false} | 200
{2, true} | 15
MapTwo Содержимое:
Keys | Values
{1, false} | 10
Эти две карты считаются не равными, так как количество для единственного ключа что равно, то отличается.
Как я могу создать лямбда-выражение, которое реализует этот тип равенства?
Моя конечная цель - иметь std::vector<std::unordered_map<std::pair<int, bool>, int>>
, который содержит неупорядоченные карты с ключами, которые истинны и находят соответствующую карту, которая равна другой карте, у которой никогда не будет ключа, который является истинным.
Например,
using mapVec = std::vector<std::unordered_map<std::pair<int, bool>, int>>;
mapVec s{};
// Fill s with unordered maps
// g = std::unordered_map<std::pair<int, bool>, int>
// customEquality = [](){}; (some lambda)?
mapVec::iterator it = s.find(g, customEquality);
Мне нужен алгоритм find_if, который принимает мой std::unorderd_map<std::pair<int, bool>, int>
и мой собственный лямбда-компаратор. Если есть еще более простой способ, я все уши.