从多图复制到矢量 [英] copy from keys from multimap into the vector
问题描述
我正在使用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屋!