如何将多个数字插入向量的特定元素?

How can I insert multiple numbers to a particular element of a vector?

我对 C++ 和矢量还很陌生。我正在计算 'i' 和 'x' 这两个东西,我想添加属于特定向量元素 'i' 的 'x'。我了解到,如果我有一个 'x' 值,我可以简单地通过 'vec.at(i) = x' 来实现。但是,如果我想将几个 'x' 值添加到向量的特定 'i' 索引怎么办?

让我们试着说清楚:假设我正在从 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:使用计数器和乘法概念并不能解决我的问题,因为实际问题非常复杂。这个查询只是一个例子而已。我想要矢量概念内的解决方案。感谢您的提前帮助。

如果您提前知道需要多少索引,请尝试 std::vector<std::vector<int>>(或者使用 double 或其他方式代替 int)。

例如,如果您想要一组数字对应于从 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 只有 'something there'),try

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::vectorstd::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; }
}