c++ - 如何将多个数字插入 vector 的特定元素?

标签 c++ vector stdvector

我对 C++ 和 vector 还很陌生。我正在计算两个东西,比如“i”和“x”,我想添加属于特定 vector 元素“i”的“x”。我了解到,如果我有一个“x”值,我可以简单地通过“vec.at(i) = x”来实现。但是,如果我想将几个“x”值添加到 vector 的特定“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:使用计数器和乘法概念并不能解决我的问题,因为实际问题非常复杂。这个查询只是一个例子而已。我想要 vector 概念内的解决方案。提前感谢您的帮助。

最佳答案

如果您提前知道需要多少索引,请尝试 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 处的 vector 中的数字求和:

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是一个不错的选择。

编辑:要对 map 中每个 vector 中的每个元素求和,您需要一个外部循环来遍历 map 中的 vector (与它们的索引配对)和一个像上面那样的内部循环。例如:

int sum = 0;
for (const std::pair<int, std::vector<int>>& index_vec : map) {
  for (int elem : index_vec.second) { sum += elem; }
}

关于c++ - 如何将多个数字插入 vector 的特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105151/

相关文章:

c++ - C++ 中的 vector 初始化

c++ - 如何有效地格式化从 std::vector 到 std::string 的值?

c++ - 在结构中定义构造函数

c++ - Visual Studio 6 提示和技巧

c++ - 使用 std::find_if 将迭代器传递给一元谓词

C++ vector 只保存最后的 push_back 值

c++ - std::sort 一个实现了 move 构造函数的类

c++ - gcc名称修改中的 "destructor group"符号是什么

c++ - C++运算符 "&"和 "->"的优先级

c++ - 具有快速插入和索引的容器?