从std :: map <int,std :: vector =“”>

时间:2016-09-13 11:22:51

标签: c++ c++11 dictionary vector stl

这是我的代码

#include <iostream>
#include <map>
#include <string>
#include <vector>

typedef std::vector<int>  VectorInt;
typedef std::map<int, VectorInt> MapVectorInt;

int main() { 
        MapVectorInt myMap;

        VectorInt v1;
        v1.push_back(1);
        v1.push_back(3);
        v1.push_back(5);

        VectorInt v2;
        v2.push_back(2);
        v2.push_back(4);
        v2.push_back(6);

        myMap.insert(std::make_pair(0, v1));
        myMap.insert(std::make_pair(1, v2)); 



        return 0;
}

在x位置采取(提取/获取)向量的方法是什么(例如1,2 ......);

3 个答案:

答案 0 :(得分:2)

您可以使用:

auto v1=myMap[0]; //This will do a deep copy for the vector

或:

auto& v1=myMap[0]; //This will hold a reference to the vector

在第二种方法中要小心,因为如果项目已删除,则引用将无效。

如果您想要安全选项,请使用std::map::at

auto v1=myMap.at(0);

或:

auto& v1=myMap.at(0)

如果项目不存在,这将抛出异常(std::out_of_range

答案 1 :(得分:2)

简短回答: 寻找它的最佳位置http://en.cppreference.com/w/cpp/container/map/find

有了上下文:

仅对于可视化,我猜你应该像你在问题中所说的那样表达你的意图(从地图中获取一个元素而不是&#34;最终&#34;将其插入为使用[]来访问一个不存在的元素创造它),所以:

const auto& search = myMap.find(1);
if (search != example.end()) {
    for(auto value: search->second) {
        std::cout << value << '\n';
    }
}
else {
    std::cout << "Not found\n";
}

Try It Live

答案 2 :(得分:1)

您可以使用myMap[0]myMap[1]来引用地图中的矢量。

您可以为其中任何一个制作别名,例如: auto& x = myMap[0];。使用别名将访问存储在地图中的矢量。

要获取矢量的副本(以便您可以修改地图内容而不更改副本),它与复制任何其他对象相同:

auto x = myMap[0];

请注意,01是指您在insert电话中使用的密钥;不是搜索顺序或插入顺序(尽管在您的示例中,这些事情都是相同的)。