Как узнать, существует ли данный ключ в C ++ std :: map

391
задан Antonio 31 October 2017 в 07:53
поделиться

5 ответов

Используйте map :: find

if ( m.find("f") == m.end() ) {
  // not found
} else {
  // found
}
646
ответ дан 22 November 2019 в 23:30
поделиться

Я знаю, что этот вопрос уже имеет некоторые хорошие ответы, но я думаю, что моим решением является ценность совместного использования.

Это работает и на std::map и на std::vector<std::pair<T, U>> и доступно от C++ 11.

template <typename ForwardIterator, typename Key>
bool contains_key(ForwardIterator first, ForwardIterator last, Key const key) {
    using ValueType = typename std::iterator_traits<ForwardIterator>::value_type;

    auto search_result = std::find_if(
        first, last,
        [&key](ValueType const& item) {
            return item.first == key;
        }
    );

    if (search_result == last) {
        return false;
    } else {
        return true;
    }
}
0
ответ дан 22 November 2019 в 23:30
поделиться
m.find == m.end() // not found 

Если вы хотите использовать другой API, найдите go for m.count (c)> 0

 if (m.count("f")>0)
      cout << " is an element of m.\n";
    else 
      cout << " is not an element of m.\n";
14
ответ дан 22 November 2019 в 23:30
поделиться

Вы можете использовать .find () :

map<string,string>::iterator i = m.find("f");

if (i == m.end()) { /* Not found */ }
else { /* Found, i->first is f, i->second is ++-- */ }
36
ответ дан 22 November 2019 в 23:30
поделиться

Думаю, вам нужен map :: find . Если m.find ("f") равно m.end () , то ключ не найден. В противном случае find возвращает итератор, указывающий на найденный элемент.

Ошибка связана с тем, что p.first является итератором, который не работает для вставки потока. Измените последнюю строку на cout << (p.first) -> first; . p - пара итераторов, p.first - итератор, p.first-> first - строка ключа.

Карта может только когда-либо иметь один элемент для данного ключа, поэтому equal_range не очень полезно. Он определен для карты, потому что он определен для всех ассоциативных контейнеров, но гораздо интереснее для мульти-карты.

12
ответ дан 22 November 2019 в 23:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: