当迭代一个 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 相当原始的指针。