如何在 unordered_map 中找到键的值?
How to find the value for a key in unordered map?
我正在尝试在 c++ 中的无序映射中执行以下示例
my_dict = {'one': ['alpha','gamma'], 'two': ['beta'], 'three' : ['charlie']}
print(my_dict["one"]) // ['alpha','gamma']
我试过像下面这样使用 find
运算符
int main ()
{
std::unordered_map<std::string, std::vector<std::string>> dict;
dict["one"].push_back("alpha");
dict["one"].push_back("beta");
dict["two"].push_back("gamma");
auto it = dict.find("one");
cout<<it->second<<endl; // expected output alphabeta
return 0;
}
但我无法检索此键的值 dict["one"]
。我错过了什么吗?
非常感谢任何帮助。
谢谢
这是因为您的 it->first
将指向字典的键,即“一”,而 it->second
将指向值,即向量。
因此,要打印矢量元素,您还需要指定要打印的矢量的索引。下面的代码会给你你想要的结果:
int main() {
std::unordered_map <std::string, std::vector<std::string>> dict;
dict["one"].push_back("alpha");
dict["one"].push_back("beta");
dict["two"].push_back("gamma");
auto it = dict.find("one");
cout<<it->second[0]<<it->second[1]<<endl; // expected output alphabeta
return 0;
}
P.S。如果您觉得有用,请采纳我的回答,这将帮助我获得一些声望点数
您遇到的失败是由于 it->second
是一个 std::vector
对象,无法打印到 std::cout
,因为它缺少 operator<<(std::ostream&,...)
的重载。
与 Python 等为您执行此操作的语言不同,在 C++ 中,您必须手动遍历元素并打印每个条目。
要解决此问题,您需要更改此行:
cout<<it->second<<endl; // expected output alphabeta
改为打印容器中的每个对象。这可能是一些简单的事情,比如遍历所有元素并打印它们:
for (const auto& v : it->second) {
std::cout << v << ' '; // Note: this will leave an extra space at the end
}
std::cout << std::endl;
或者,如果确切的格式很重要,您可以变得更复杂。
@DanielLangr 在问题的评论中发布了 link,总结了所有可能的方法,如果您想要更复杂的东西,我建议您看一下:How do I print the contents to a Vector?
我正在尝试在 c++ 中的无序映射中执行以下示例
my_dict = {'one': ['alpha','gamma'], 'two': ['beta'], 'three' : ['charlie']}
print(my_dict["one"]) // ['alpha','gamma']
我试过像下面这样使用 find
运算符
int main ()
{
std::unordered_map<std::string, std::vector<std::string>> dict;
dict["one"].push_back("alpha");
dict["one"].push_back("beta");
dict["two"].push_back("gamma");
auto it = dict.find("one");
cout<<it->second<<endl; // expected output alphabeta
return 0;
}
但我无法检索此键的值 dict["one"]
。我错过了什么吗?
非常感谢任何帮助。
谢谢
这是因为您的 it->first
将指向字典的键,即“一”,而 it->second
将指向值,即向量。
因此,要打印矢量元素,您还需要指定要打印的矢量的索引。下面的代码会给你你想要的结果:
int main() {
std::unordered_map <std::string, std::vector<std::string>> dict;
dict["one"].push_back("alpha");
dict["one"].push_back("beta");
dict["two"].push_back("gamma");
auto it = dict.find("one");
cout<<it->second[0]<<it->second[1]<<endl; // expected output alphabeta
return 0;
}
P.S。如果您觉得有用,请采纳我的回答,这将帮助我获得一些声望点数
您遇到的失败是由于 it->second
是一个 std::vector
对象,无法打印到 std::cout
,因为它缺少 operator<<(std::ostream&,...)
的重载。
与 Python 等为您执行此操作的语言不同,在 C++ 中,您必须手动遍历元素并打印每个条目。
要解决此问题,您需要更改此行:
cout<<it->second<<endl; // expected output alphabeta
改为打印容器中的每个对象。这可能是一些简单的事情,比如遍历所有元素并打印它们:
for (const auto& v : it->second) {
std::cout << v << ' '; // Note: this will leave an extra space at the end
}
std::cout << std::endl;
或者,如果确切的格式很重要,您可以变得更复杂。
@DanielLangr 在问题的评论中发布了 link,总结了所有可能的方法,如果您想要更复杂的东西,我建议您看一下:How do I print the contents to a Vector?