1

我正在尝试在 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"]。我错过了什么吗?非常感谢任何帮助。谢谢

4

2 回答 2

1

您遇到的失败是由于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 在该问题的评论中发布了一个链接,该链接总结了所有可能的方法,如果您想要更复杂的内容,我建议您查看一下:如何将内容打印到 Vector?

于 2021-02-04T18:06:15.923 回答
1

这是因为您it->first将指向字典的键,即“One”,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;

}

PS如果您觉得它有用,请接受我的回答,因为这将帮助我获得一些声誉积分

于 2021-02-04T05:34:05.213 回答