Visual Studio — печать нескольких значений определенного ключа в std :: unordered_multimap в переполнении стека

Я пытаюсь напечатать все значения, связанные с конкретным ключом в unordered_multiset в C ++, но, к сожалению, когда я запускаю приведенный ниже код, я получаю два разных вывода в Visual Studio и онлайн-компилятор http://cpp.sh/.
Visual Studio выдает только красный
cpp.sh выдает только «зеленый» в качестве вывода

#include <iostream>
#include <string>
#include <unordered_map>

int main()
{
std::unordered_map<std::string, std::string> myumm = {
{ "apple","red" },
{ "apple","green" },
{ "orange","orange" },
{ "strawberry","red" }
};

std::cout << "myumm contains:";
for (auto it = myumm.begin(); it != myumm.end(); ++it)
std::cout << " " << it->first << ":" << it->second;
std::cout << std::endl;

std::cout << "myumm's buckets contain:\n";
for (unsigned i = 0; i < myumm.bucket_count(); ++i) {
std::cout << "bucket #" << i << " contains:";
for (auto local_it = myumm.begin(i); local_it != myumm.end(i); ++local_it)
std::cout << " " << local_it->first << ":" << local_it->second;
std::cout << std::endl;
}
int x = 0;
auto pt = myumm.find("apple");
for (auto it = pt->second.begin(); it != pt->second.end(); ++it) {
std::cout << *it;}
return 0;
}

Я ожидаю напечатать как «красный», так и «зеленый» для ключевого «яблока», но я получаю либо зеленый, либо красный в качестве вывода в cpp.sh и visual studio соответственно

myumm contains: orange:orange strawberry:red apple:green apple:red
myumm's buckets contain:
bucket #0 contains:
bucket #1 contains: orange:orange
bucket #2 contains:
bucket #3 contains: strawberry:red apple:green apple:red
bucket #4 contains:
green

1

Решение

Как отмечает @PeteBecker, требуемый вызов equal_range, Конкретно функция-член — не бесплатная функция.

(непроверенный код)

auto p = myumm.equal_range("apple");
for (auto it = p.first; it != p.second; ++it)
std::cout << " " << it->first << ":" << it->second;

должен делать то, что вы хотите.

1

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

Других решений пока нет …

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