我有map<id,age>,
;如何获得每个<id,age>
对的年龄,并将年龄分配给C ++中的C风格数组?
有效的方法是什么?我的意思是如何以与地图相同的顺序填充C风格的数组?
答案 0 :(得分:3)
如果您决定坚持使用固定阵列方法
//Assuming both id and age are integers
map<int,int> myMap; // Your id and age map
map<int,int>::iterator it;
int myList[100];
int i = 0;
for(it = myMap.begin(); (i < 100 && it != myMap.end()); it++)
{
myList[i++] = (*it).second;
}
更好的方法是使用向量而不是数组
//Assuming both id and age are integers
map<int,int> myMap; // Your id and age map
map<int,int>::iterator it;
vector<int> myList;
for(it = myMap.begin(); it != myMap.end(); it++)
{
myList.push_back((*it).second);
}
答案 1 :(得分:2)
如果你可以使用c ++ 11,你可以使用lambda表达式。
map<id,age> m;
std::list<age> l;
std::for_each(m.begin(), m.end(), [&l](std::pair<id,age> p){
l.push_back(p.second);
});
答案 2 :(得分:1)
我不认为你提出的问题很有意义,但是为了摆弄C ++容器
(注意::不使用任何C ++ 0x功能) http://ideone.com/Kf2du
编辑为了回应DavidRodríguez的优秀评论,我编辑了代码以避免复制(另请参阅https://ideone.com/7Oa5n):
#include <map>
#include <list>
#include <algorithm>
#include <iterator>
#include <vector>
typedef std::map<std::string, int> map_t;
int getage(const map_t::value_type& pair)
{
return pair.second;
}
int main()
{
map_t agemap;
agemap["jill"] = 13;
agemap["jack"] = 31;
std::list<int> agelist(agemap.size());
std::transform(agemap.begin(), agemap.end(), agelist.begin(), getage);
// or:
std::vector<int> v;
std::transform(agemap.begin(), agemap.end(), std::back_inserter(v), getage);
}
根据大众需求,只是拼出:
int age_array[10];
std::transform(agemap.begin(), agemap.end(), age_array, getage);
甚至
int *dyn_array = new int[agemap.size()];
std::transform(agemap.begin(), agemap.end(), dyn_array, getage);
// ...
delete[] dyn_array;
答案 3 :(得分:0)
你已经说过你想要一个C阵列,我会特别回答你的要求。
std::map<int,int> some_map;
int * c_array=new int[some_map.size()];
size_t k=0;
for (std::map<int,int>::iterator i=some_map.begin();
i != some_map.end(); ++i)
{
c_array[k++]=(*i).second;
}
delete[] c_array;
正如其他人所说,C ++的标准将是向量。我想补充一点,你想要事先保留适当的空间,因为你已经知道了。可以通过c-tor为矢量保留它。
std::map<int,int> some_map;
std::vector<int> some_vector(some_map.size());
for (std::map<int,int>::iterator i=some_map.begin();
i != some_map.end(); ++i)
{
some_vector.push_back((*i).second);
}