如何给下面这样的vector<int>变量赋值
我现在有一个变量
set< pair< int, pair<int, int> > > myset;
已经给它赋过值。
然后我现在定义一个vector< pair<int, int> >类型的变量
vector< pair<int, int> > pvec;
我想把myset里对应某个键值的pair的实值对赋给pvec(这些实值对有多个),
如下所示:
假设我想把myset里的键值为10的实值对赋给pvec,这些实值对有5个。
myset.counts(10) == 5; // return true
我该如何写代码,不用循环,就是直接初始化赋值什么的,有办法吗
[解决办法]
不要使用嵌套的容器,运行效率会很低。
[解决办法]
int main (){ set< pair< int, pair<int, int> > > myset; vector< pair<int, int> > pvec; pair<int, int> a(1,2); pair<int, int> b(2,2); pair< int, pair<int, int> > c(3,a); pair< int, pair<int, int> > d(5,b); myset.insert(c); myset.insert(d); set< pair< int, pair<int, int> > >::iterator ite = myset.begin(); for ( ; ite!=myset.end(); ++ite) { if (ite->first == 5) { pvec.push_back(ite->second); } } system ("pause") ; return 0 ;}
[解决办法]
set< pair< int, pair<int, int> > > myset =
{{ 1, {2, 3} },
{ 1, {2, 4} },
{ 1, {2, 5} }}
用支持C++2011的新编译器就行了。
然后就是用boost::assign库list_of
[解决办法]
建议把 set< pair< int, pair<int, int> > > myset
改成 map<int,set<pair<int,int> > >
或者直接 map<int,vector<pair<int,int> > >
就可以不用循环直接赋值了。