使用c+的多维向量解+;STL 我想用C++ STL来尝试下面的实现。 我的要求是创建下面提到的矩阵。 向量字符串为:

使用c+的多维向量解+;STL 我想用C++ STL来尝试下面的实现。 我的要求是创建下面提到的矩阵。 向量字符串为:,c++,stl,C++,Stl,基本上,我想更新计算男人/女人/孩子数量的矩阵。 对于基于以下所述样本输入的eg,预期输出为: 东京=>男人=1,女人=1,小孩=0 我认为方法是首先对城市进行排序,并获得唯一的值。 然后同样地为男人、女人和孩子做。然后数一数那个城市的男人/女人/孩子的数量。要做到这一点,哪种容器才是理想的有序映射?我应该如何处理这种多维数组问题。 处理这种情况最有效的方法是什么?如有其他解决办法,我们将不胜感激 样本输入 预期输出[将相应填写,请忽略空字段] 这取决于任何维度的可能值是否是先验的。如果是,一

基本上,我想更新计算男人/女人/孩子数量的矩阵。 对于基于以下所述样本输入的eg,预期输出为: 东京=>男人=1,女人=1,小孩=0

我认为方法是首先对城市进行排序,并获得唯一的值。 然后同样地为男人、女人和孩子做。然后数一数那个城市的男人/女人/孩子的数量。要做到这一点,哪种容器才是理想的有序映射?我应该如何处理这种多维数组问题。 处理这种情况最有效的方法是什么?如有其他解决办法,我们将不胜感激

样本输入

预期输出[将相应填写,请忽略空字段]
这取决于任何维度的可能值是否是先验的。如果是,一个简单的数组将是最好的容器,否则您应该使用映射。如果顺序不重要,请使用
无序映射
,如果可以排序,请使用有序的
映射
,如果要保持输入顺序,请使用索引存储在映射中的
列表

如果已知类别只得到3个可能值(男人、女人、孩子),而城市是未知的,我会使用:

std::map<std::string, std::array<int, 3> > resul;

std::string town, cat;
for(;;) {
    std::cin >> town >> cat;
    if (! std::cin) break;
    if (resul.find(town) == resul.end()) {
        resul[town].fill(0);
    }
    std::array<int, 3>& curtown = resul[town];
    if (cat == "Man") curtown[MAN] += 1;
    else if (cat == "Woman") curtown[WOMAN] += 1;
    else curtown[KID] += 1;
}
std::映射结果;
标准:字符串镇,猫;
对于(;;){
std::cin>>城镇>>猫;
如果(!std::cin)中断;
如果(结果查找(城镇)=结果结束()){
结果[town]。填充(0);
}
std::array&curtown=resu[town];
如果(猫==“人”)curtown[Man]+=1;
否则,如果(猫==“女人”)curtown[女人]+=1;
else curtown[KID]+=1;
}

std::map数据如何处理?然后从文件中读取
city
category
,然后执行
++data[city][category]
。对于短键,
std::vector
和顺序搜索可能更快,如果性能不是最重要的,我更喜欢
std::map
语法。当然,您可以尝试使用
std::unordered_map
并(部分)获得这两个选项的最佳效果。城市和类别是否就是您编写的?如果是这样,最有效的方法就是使用固定大小的C数组或std::array。请不要滥用图像!一个好的SO问题应该是可以理解的,即使图像被阻止。在这里,ascii码格式的段落就足够了。城市的尺寸未知,但类别可以固定为3