【发布时间】:2020-11-27 10:25:48
【问题描述】:
以下代码显示了结构绑定的正常工作方式。 与“first”、“second”相比,它提供了一个更具描述性的名称。
map<string, string> sites;
sites.insert({ "GeeksforGeeks", "Coding Resources" });
for (auto& [key, value] : sites)
{
cout << key.c_str() << " " << value.c_str() << endl;
}
现在我有一个std::vector<pair<std::string, People>* > vec;
People 这里是一个班级,string 是他/她的昵称。
下面的代码不起作用,因为vec 包含指针。
for (auto & [kay, value] : vec) {}
那我应该怎么做才能使用结构绑定来提供更具描述性的名称呢?
编辑:
我使用指针是因为我想避免复制。
这就是我构建std::vector<pair<std::string, People>* > vec; 的方式。
我有一个unordered_map<string, People>,我需要以确定的方式将结果打印给客户端,但地图的遍历顺序是随机的。
所以,我创建了vec 并按字符串对vec 进行排序,这是键。
如果不使用指针,如果我想排序就会发生很多副本。
【问题讨论】:
-
您必须遍历指针并将结构化绑定推迟到循环内,结构化绑定中没有解除引用的语法,也没有基于范围的 for 循环
-
我使用指针是因为我想避免复制。
-
你的意思是你没有做什么deep copy
std::pair<std::string, People>,而只是一个vec持有的指针的副本。听起来不太好。无论如何,这是另一个问题/问题。 -
我更新了问题。它提供了更多信息。 :)
-
如果答案帮助您解决了问题,您可以将其标记为已接受。否则请告诉我,缺少什么...
标签: c++ c++17 stdvector stdmap structured-bindings