从多图复制到矢量 [英] copy from keys from multimap into the vector

查看:66
本文介绍了从多图复制到矢量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用while循环,但我相信你可以更快地完成它并且

在复制功能上语法清晰。


这是什么如果有人有更清洁的解决方案,我愿意并且愿意:


vector< stringvec;

multimap< stirng,intmyMap


//填充myMap

multimap< string,int> :: iterator iter = myMap.begin();


while(iter!= myMap.end())

{

vec.push_back(iter-> first)

}

I am using while loop for that but I am sure you can do it quicker and
more syntactically clear with copy function.

Here is what I do and would like to if someone has a cleaner solution:

vector<stringvec;
multimap<stirng, intmyMap

// populate myMap

multimap<string, int >::iterator iter = myMap.begin();

while(iter != myMap.end())
{
vec.push_back(iter->first)
}

推荐答案

29 Okt。,20:33,puzzlecracker< ironsel2 ... @ gmail.comwrote:
On 29 Okt., 20:33, puzzlecracker <ironsel2...@gmail.comwrote:

我正在使用while循环,但我相信你可以更快地完成它并且

在复制功能上语法清晰。


这里如果有人有更清洁的解决方案,我会做什么和想做什么:


* * vector< stringvec;

* * multimap< stirng,intmyMap


* * //填充myMap

* * multimap< string,int> :: iterator iter = myMap.begin();


* * while(iter!= myMap.end())

* * {

* * * * * * vec。 push_back(iter-> first)

* *}
I am using while loop for that but I am sure you can do it quicker and
more syntactically clear with copy function.

Here is what I do and would like to if someone has a cleaner solution:

* * vector<stringvec;
* * multimap<stirng, intmyMap

* *// populate myMap

* * multimap<string, int >::iterator iter = myMap.begin();

* * while(iter != myMap.end())
* * {
* * * * * *vec.push_back(iter->first)
* * }



什么是错误的

std :: copy (myMap.begin(),myMap.end(),std :: back_inse rter(vec)); ?


您可以先在vec上预留以提高性能。


/ Peter

Whats wrong with
std::copy(myMap.begin(),myMap.end(),std::back_inse rter(vec)); ?

You could do a reserve on vec first to improve performance.

/Peter

我正在使用while循环,但我相信你可以更快地完成它并且
I am using while loop for that but I am sure you can do it quicker and

更复杂的语法清晰功能。
more syntactically clear with copy function.


如果有人有更清洁的解决方案,这就是我所做的和想做的事:
Here is what I do and would like to if someone has a cleaner solution:


* * vector< stringvec;

* * multimap< stirng,intmyMap
* * vector<stringvec;
* * multimap<stirng, intmyMap


* * / / populate myMap
* *// populate myMap


* * multimap< string,int> :: iterator iter = myMap.begin();
* * multimap<string, int >::iterator iter = myMap.begin();


* * while(iter!= myMap.end())

* * {

* * * * * * vec.push_back(iter-> first)

* *}
* * while(iter != myMap.end())
* * {
* * * * * *vec.push_back(iter->first)
* * }



错误

std :: copy(myMap.begin(),myMap.end(),std :: back_inse rter(vec)); ?


Whats wrong with
std::copy(myMap.begin(),myMap.end(),std::back_inse rter(vec)); ?



地图''元素包含键和值,所以这不是

正确。

OP只想要钥匙。

A map''s element contains both the key and the value so this is not
correct.
The OP just wants the key.


2008年10月29日星期三12:33:38 -0700,puzzlecracker写道:
On Wed, 29 Oct 2008 12:33:38 -0700, puzzlecracker wrote:

我正在使用while循环,但我相信你可以更快地完成它并且

在复制功能上语法清晰。


如果有人有更清洁的解决方案,这就是我的工作和意愿:


vector< stringvec;

multimap< stirng,intmyMap


//填充myMap

multimap< string,int> :: iterator iter = myMap.begin();


while(iter!= myMap.end())

{

vec.push_back(iter-> first)

}
I am using while loop for that but I am sure you can do it quicker and
more syntactically clear with copy function.

Here is what I do and would like to if someone has a cleaner solution:

vector<stringvec;
multimap<stirng, intmyMap

// populate myMap

multimap<string, int >::iterator iter = myMap.begin();

while(iter != myMap.end())
{
vec.push_back(iter->first)
}



#include< vector>

#include< map>

#include< iterator> ;

#includ e< algorithm>

#include< iostream>


模板< typename C,typename M>

class key_inserter:

public std :: iterator< std :: output_iterator_tag,void,void,v oid,void {

private:

C& d_coll;

public:

key_inserter(C& c):d_coll(c){}

key_inserter& operator *(){return * this; }

key_inserter& operator ++(){return * this; }

key_inserter& operator ++(int){return * this; } $ / $
key_inserter&

operator =(typename M :: value_type const& p){

d_coll.push_back(p.first) ;

返回* this;

}

};


模板< typename C,typename M>

key_inserter< C,Mmake_key_inserter(C& c,M& m){

返回key_inserter< C,M>(c);

}


int main(){

std :: vector< intv;

std :: map< int,intm;

m [0]; m [1]; m [2]; m [6];

std :: copy(m.begin(),

m.end(),

make_key_inserter(v,m));

std :: copy(v.begin(),

v.end(),

std :: ostream_iterator< int>(std :: cout," \ n"));

返回0;

}


-

OU

记住2008年6月18日,民主当天下午去世了。
http://frapedia.se/wiki/Information_in_English

#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <iostream>

template<typename C, typename M>
class key_inserter :
public std::iterator<std::output_iterator_tag,void,void,v oid,void{
private:
C & d_coll;
public:
key_inserter(C & c) : d_coll(c) {}
key_inserter & operator*() { return *this; }
key_inserter & operator++() { return *this; }
key_inserter & operator++(int) { return *this; }
key_inserter &
operator=(typename M::value_type const & p) {
d_coll.push_back(p.first);
return *this;
}
};

template<typename C, typename M>
key_inserter<C,Mmake_key_inserter(C & c, M & m) {
return key_inserter<C,M>(c);
}

int main() {
std::vector<intv;
std::map<int,intm;
m[0];m[1];m[2];m[6];
std::copy(m.begin(),
m.end(),
make_key_inserter(v,m));
std::copy(v.begin(),
v.end(),
std::ostream_iterator<int>(std::cout,"\n"));
return 0;
}

--
OU
Remember 18th of June 2008, Democracy died that afternoon.
http://frapedia.se/wiki/Information_in_English


这篇关于从多图复制到矢量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆