如何将元素插入和迭代到这种地图。 C ++

问题描述 投票:0回答:2

我独自尝试。但是我做不到。所以,请帮忙。

unordered_map<string, pair<string , vector<int>>> umap;

或更准确地说,我们如何制作一对可在地图中使用的字符串和一个向量。

c++ dictionary maps
2个回答
0
投票

您可以使用insert函数并将它们成对插入(或精确嵌套对)。例如,签出此程序:

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;

int main()
{
    unordered_map<string, pair<string , vector<int>>> umap;
    umap.insert(make_pair("first", make_pair("data1",vector<int>(3, 0))));
    umap.insert(make_pair("second", make_pair("data2",vector<int>(3, 1))));

    for(auto p : umap)
    {
        cout << p.first << " -> " << p.second.first << " , VECTOR : " ;
        for(auto x : p.second.second)
            cout << x << ',';
        cout << endl; 
    }
}

输出是:

second -> data2 , VECTOR : 1,1,1,
first -> data1 , VECTOR : 0,0,0,

我希望这会有所帮助。


0
投票

这在很大程度上取决于所创建内容的复杂性。例如,如果向量中有一些常量,则可以将它们放在适当的位置:

umap.emplace("s", std::make_pair("s2", std::vector<int>{1, 2, 3, 4}));

然而,您很有可能会以某种复杂的方式制作内部零件。在这种情况下,您可以更轻松地将其作为单独的结构来进行。

std::vector<int> values;
values.push_back(1);
auto my_value = std::make_pair("s2", std::move(values));
umap.emplace("s2", std::move(my_value));

使用移动来移动数据可确保最少的复制。

最后,要迭代这些项目,通常使用range-based for loops

for (const auto& [key, value]: umap) {
    std::cout << key << ": ";
    const auto& [name, values] = value;
    std::cout << name << " {";
    for (auto val : values) {
        std::cout << val << " ";
    }
    std::cout << "}\n";
}

Here you can check out a live example.

© www.soinside.com 2019 - 2024. All rights reserved.