Определите, произошло ли столкновение в C ++ 11 unordered_set

0

Я играю с С++ 11, и я пытаюсь добавить элементы к неупорядоченному набору, и если я уже добавил элемент в свой unordered_set, я не хочу его добавлять снова (т.е.) не добавляйте cat снова в неупорядоченный набор ниже.

    std::unordered_set<std::string> s;
    std::vector<std::string> myString;

    myString.push_back("cat");
    myString.push_back("dog");
    myString.push_back("bird");
    myString.push_back("cat");



for(auto &i : myString){
        //add elements from myString to unordered_set s
}

Я не совсем уверен, как это сделать. Я понимаю, что мне нужно иметь std::pair равную моему s.insert(i) однако я не совсем уверен, как настроить это, чтобы я мог это сделать.

Любая помощь будет принята с благодарностью

Теги:
c++11

3 ответа

2

Почему вы обеспокоены? std::unordered_set содержит только уникальные элементы (автоматически не добавляется, если он уже существует), но есть функция find():

for(auto &i : myString){
    if(s.insert(i).second) 
        //inserted
    else
       //already exists
}
  • 0
    Как получить возвращаемое значение bool о том, был ли добавлен элемент?
  • 0
    @ user2604504 см редактировать
Показать ещё 2 комментария
0

std::unordered_set содержит набор уникальных объектов.

Это означает, что он не может содержать дубликаты (два элемента считаются эквивалентными, если operator== возвращает true).

Пример:

std::unordered_set<std::string> s;
s.emplace("cat");
s.emplace("cat");
s.emplace("cat");

// At this point s only contains one std::string object.

Чтобы добавить уникальные элементы из std::vector просто используйте std::vector::insert следующим образом:

s.insert(std::begin(vec), std::end(vec));

std::unordered_set не будет вставлять элемент, если он уже содержит элемент с эквивалентным ключом.

0
for(auto& i: myString) {
    if(s.insert(i).second) std::cout << "inserted" << std::endl
    else std::cout << "dupe" << std::endl;
}

unordered_set не будет вставлять дубликаты, никаких проверок не требуется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню