当迭代一个 std::pair<string, some_struct >* 的向量时使用结构绑定
Use structure binding when iterator a vector of std::pair<string, some_struct >*
下面的代码显示了结构绑定的正常工作方式。
与“第一”、“第二”相比,它提供了更具描述性的名称。
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
这里是class,而string
是his/her的昵称。
下面的代码不起作用,因为 vec
包含指针。
for (auto & [kay, value] : vec) {}
那我应该如何使用结构绑定来提供更具描述性的名称?
编辑:
我使用指针是因为我想避免复制。
这就是我构建 std::vector<pair<std::string, People>* > vec;
.
的方式
我有一个 unordered_map<string, People>
,我需要以一种确定的方式将结果打印给客户端,但是地图的遍历顺序是随机的。
因此,我创建 vec
并按字符串对 vec
进行排序,这是键。
如果不使用指针,如果我要排序,就会发生很多副本。
您可以对std::vector<pair<std::string, People>* > vec;
执行以下操作
for (std::pair<std::string, People>* pairPtr : vec) // iterate via pair-ptrs
{
if (pairPtr) // if the pointer is valid!
{
const auto& [key, people] = *pairPtr;
// do something with the key and vale!
}
}
如果pair-pointer指向数组,则需要遍历并执行上述操作。
顺便说一句,看看 C++17 中的 smart pointers 相当原始的指针。
下面的代码显示了结构绑定的正常工作方式。 与“第一”、“第二”相比,它提供了更具描述性的名称。
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
这里是class,而string
是his/her的昵称。
下面的代码不起作用,因为 vec
包含指针。
for (auto & [kay, value] : vec) {}
那我应该如何使用结构绑定来提供更具描述性的名称?
编辑:
我使用指针是因为我想避免复制。
这就是我构建 std::vector<pair<std::string, People>* > vec;
.
我有一个 unordered_map<string, People>
,我需要以一种确定的方式将结果打印给客户端,但是地图的遍历顺序是随机的。
因此,我创建 vec
并按字符串对 vec
进行排序,这是键。
如果不使用指针,如果我要排序,就会发生很多副本。
您可以对std::vector<pair<std::string, People>* > vec;
for (std::pair<std::string, People>* pairPtr : vec) // iterate via pair-ptrs
{
if (pairPtr) // if the pointer is valid!
{
const auto& [key, people] = *pairPtr;
// do something with the key and vale!
}
}
如果pair-pointer指向数组,则需要遍历并执行上述操作。
顺便说一句,看看 C++17 中的 smart pointers 相当原始的指针。