在 C++ 中打印 std::unordered_multimap 中特定键的多个值
Printing multiple values of particular key in std::unordered_multimap in C++
我试图在 C++ 中打印与 unordered_multiset 中的特定键关联的所有值,但不幸的是,当我 运行 波纹管代码时,我在 [=26= 中得到两个不同的输出] 和在线编译器 http://cpp.sh/。
Visual Studio 只给出 'red' 作为输出
cpp.sh 仅给出 'green' 作为输出
#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;
}
我希望为键 'apple' 同时打印 'red' 和 'green' 但我在 cpp.sh 和 [=28 中得到绿色或红色输出=]分别
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
正如@PeteBecker 所说,您想要的电话是 equal_range
。具体来说,成员函数 - 而不是自由函数。
(未经测试的代码)
auto p = myumm.equal_range("apple");
for (auto it = p.first; it != p.second; ++it)
std::cout << " " << it->first << ":" << it->second;
应该做你想做的。
我试图在 C++ 中打印与 unordered_multiset 中的特定键关联的所有值,但不幸的是,当我 运行 波纹管代码时,我在 [=26= 中得到两个不同的输出] 和在线编译器 http://cpp.sh/。 Visual Studio 只给出 'red' 作为输出 cpp.sh 仅给出 'green' 作为输出
#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;
}
我希望为键 'apple' 同时打印 'red' 和 'green' 但我在 cpp.sh 和 [=28 中得到绿色或红色输出=]分别
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
正如@PeteBecker 所说,您想要的电话是 equal_range
。具体来说,成员函数 - 而不是自由函数。
(未经测试的代码)
auto p = myumm.equal_range("apple");
for (auto it = p.first; it != p.second; ++it)
std::cout << " " << it->first << ":" << it->second;
应该做你想做的。