Поиск значения в unordered_map - PullRequest
       4

Поиск значения в unordered_map

10 голосов
/ 09 декабря 2010

Я использую Boost unordered_map.У меня есть пара ключ-значение для каждой записи.Как я могу определить, существует ли конкретное значение на карте?(Я не хочу создавать еще одно unordered_map, в котором значение сохранено как ключ, а ключ как значение)

Спасибо.

Ответы [ 4 ]

9 голосов
/ 09 декабря 2010

Как насчет следующего:

typedef std::unordered_map<int,std::string> map_type;
typedef std::unordered_map<int,std::string>::value_type map_value_type;

map_type m;

if (m.end() != find_if(m.begin(),m.end(),[](const map_value_type& vt)
                                           { return vt.second == "abc"; }
                                           ))
   std::cout << "Value found." << std::end;
else
   std::cout << "Value NOT found." << std::end;

Или с помощью полученной внешней переменной:

std::string value = "abc";
if (m.end() != find_if(m.begin(),m.end(),[&value](const map_value_type& vt)
                                                 { return vt.second == value; }))
   std::cout << "Value found." << std::end;
else
   std::cout << "Value NOT found." << std::end;
7 голосов
/ 09 декабря 2010

Boost имеет Bimap , который является двунаправленной картой (т. Е. Ключи и значения относятся друг к другу).Это звучит более подходящим для ваших нужд, чем unordered_map.

5 голосов
/ 09 декабря 2010

Вам нужно перебрать все элементы в unordered_map и посмотреть, существует ли данное значение.

Алгоритм std::find_if с пользовательским предикатом можно использовать для упрощения этого.

0 голосов
/ 12 марта 2013

Почему мы не можем использовать метод count вместо find ()

Описание: Подсчет элементов с определенным ключом Ищет в контейнере элементы, ключ которых равен k, и возвращает количество найденных элементов. Поскольку контейнеры unordered_map не допускают дублирования ключей, это означает, что функция фактически возвращает 1, если элемент с этим ключом существует в контейнере, и ноль в противном случае.

unordered_map<int, int> hash;
    //converted array into hashMap
    for(int i=0; i<6; i++)
    {
        hash[i];
    }

    //commom elemenest value is set to 1 in hashMap
    for(int i =0; i<7; i++)
    {
        //element exist in array1
        if(hash.count(i))
        {
            hash[i] = 1;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...