c/c++ 语言 map<string, vector<node> >怎样遍历vector

structnode{intx;inty;};map<string,vector<node>>map1;赋值略;for(map<string,vector<node>>:... struct node{
int x;
int y;
};
map<string, vector<node> > map1;
赋值略;
for(map<string, vector<node> > :: iterator it = map1.begin(); it!=map1.end();it++)
{
string curstr = it ->first; //这个是不是map里面的string参数?
vertor <node> tmp = it->second; //这个是不是把map里面的vector中所有的内容都放在了tmp里?
for(size_t sz = 0; sz <tmp.size(); i++)
{
//怎样遍历vertor,输出里面所有的内容??
}
}
展开
 我来答
帐号已注销
推荐于2016-07-07 · TA获得超过3954个赞
知道大有可为答主
回答量:1636
采纳率:77%
帮助的人:1235万
展开全部
  1.  这个是不是map里面的string参数? 是的

  2. it->second是map中对应于it->first的vector, 你这样的写法导致了复制,应该用引用。

  3. tmp[i] 是node变量。


下面是一段简化的代码:


#include <map>

#include <vector>

#include <iostream>


struct Point {

    int x;

    int y;

};


std::ostream & operator <<(std::ostream & out, const Point & p) {

    return out << '(' << p.x << ',' << p.y << ')';

}


using ConType = std::map<std::string, std::vector<Point>>;


void travel(ConType & con);


int main() {

    std::map<std::string, std::vector<Point>> con;

    std::vector<Point> a, b, c;

    a.push_back({1, 3});

    a.push_back({4, 5});

    a.push_back({5, 7});

    b.push_back({2, 3});

    b.push_back({5, 3});

    c.push_back({5, 7});

    c.push_back({5, 4});

    con["a"] = a;

    con["b"] = b;

    con["c"] = c;

    travel(con);

}


void travel(ConType & con) {

    for(auto & i : con) {

        for(auto & j : i.second) {

            std::cout << j << '\t';

        }

    std::cout << std::endl;

    }

}



千锋教育
2015-12-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
c++中遍历vector的方法如下:
Vector vec = map.get(vector名字);
方式一
for (size_t i =0; i < vec.size(); i ++) {
int d = vec[i];
}
方式二

size_t len = vec.size();
for (size_t i =0; i < len; i ++) {
int d = vec[i];
}
方式三

for (auto it = vec.begin(); it != vec.end(); it ++) {
int d = *it;
}
方式四

for (int i:vec) {
int d = i;
}

方式五
for_each(vec.begin(), vec.end(), [](int i){
int d = i;
});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weidong3630
2015-09-24 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:322
采纳率:28%
帮助的人:79.3万
展开全部
先通过迭代器遍历map,然后然后通过 it->second 可以取出vector对象,下面再遍历好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IT孤鹜
2013-08-30 · TA获得超过4198个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3570万
展开全部
cout<<tmp[i].x<<tmp[i].y<<endl; 这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式