我对C ++和vector很陌生。我正在计算两个说“我”和“x”的东西,我想添加属于特定向量元素“i”的'x'。我了解到,如果我有一个'x'值,我可以通过'vec.at(i)= x'来做到这一点。但是如果我想在向量的特定“i”索引中添加几个“x”值呢?
让我们试着说清楚:假设我在1到10的数字列表中搜索数字'5'和'3'(5和3可以在列表中多次出现),每次我都是寻找属于'vec'的索引'2'的5或3号,我可以做'vec.at(2)= 5'或'vec.at(2)= 3'。那么如果我有两个'5'值和两个'3'值,那么'vec'的索引'2'的总和将是'5 + 5 + 3 + 3'= 16?
P.S:使用计数器和乘法概念不能解决我的问题,因为真正的问题非常复杂。此查询仅是一个示例。我想在矢量概念内的解决方案。我提前感谢您的帮助。
答案 0 :(得分:1)
如果您提前了解了多少指数,请尝试std::vector<std::vector<int>>
(或代替int
使用double
或其他内容。
例如,如果您想要对应于0到9之间每个数字的数字集合,请尝试
//This creates the vector of vectors,
//of length 10 (i.e. indices [0,9])
//with an empty vector for each element.
std::vector<std::vector<int>> vec(10, std::vector<int>());
要在给定索引处插入元素(假设那里有某些东西,所以在上面的例子中,元素0到9只有'某些东西'),试试
vec.at(1).push_back(5);
vec.at(1).push_back(3);
然后取索引1处向量中的数字之和:
int sum = 0;
for (int elem : vec.at(1)) { sum += elem; }
//sum should now be 8
如果你想让它适用于任意索引,那么它应该是
std::map<int, std::vector<int>> map;
map[1].push_back(5); //creates an empty vector at index 1, then inserts
map[1].push_back(3); //uses the existing vector at index 1
int sum = 0;
for (int elem : map.at(1)) { sum += elem; }
请注意,对于std::vector
和std::map
,使用[]
执行的操作非常不同。大多数情况下,您需要at
,两者大致相同,但在这种非常具体的情况下,[]
std::map
是一个不错的选择。
编辑:要对地图中每个向量中的每个元素求和,你需要一个外部循环来遍历地图中的向量(与它们的索引配对)和一个像上面那样的内部循环。例如:
int sum = 0;
for (const std::pair<int, std::vector<int>>& index_vec : map) {
for (int elem : index_vec.second) { sum += elem; }
}