如何将多个数字插入向量的特定元素?
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::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; }
}
我对 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::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; }
}