通过迭代器对map的元素求和
sum elements of map by iterator
我想用iterator
在c++中求和map
的前四个元素。
map<int, string> numbers; //making object of map
numbers.insert(pair<int, string>(2,"two")); //inserting values into map
numbers.insert(pair<int, string>(3,"two")); //inserting values into map
numbers.insert(pair<int, string>(4,"two")); //inserting values into map
numbers.insert(pair<int, string>(7,"two")); //inserting values into map
numbers.insert(pair<int, string>(5,"two")); //inserting values into map
map<int, string>::iterator it;
it=numbers.begin();
for( ;it!=numbers.begin()+4; it++){ //problem is here and in body
}
您可以从<algorithm>
头使用std::accumulate
:
std::accumulate(it, std::next(it,4), 0,
[](const auto& a, const auto& b){return a + b.first;});
不要在迭代器中使用+
。它只对随机访问迭代器有意义,但没有理由任意限制自己(事实上,这意味着您的代码无法工作,因为map迭代器不是随机访问的)。相反,使用<iterator>
:
#include <cassert>
#include <iterator>
// ...
assert(numbers.size() >= 4);
for (auto it = numbers.begin(), e = std::next(it, 4); it != e; ++it)
{ // ^^^^^^^^^^^^^^^^^^^^
acc += it->first;
}
迭代器算术器next
/prev
和advance
适用于所有迭代器,它们在内部分派到最有效的操作。例如,advance(it, n)
对随机访问迭代器执行it += n
,否则执行循环。
用一点c++11,如果我明白你想要求和的话,你可以这样做:
std::map<int, std::string> numbers = {
{2,"two"},
{3,"two"},
{4,"two"},
{7,"two"},
{5,"two"}
}; //Better initialisation
std::string sum = "";
for(auto it = std::begin(numbers); it != std::next(std::begin(numbers),4); ++it)
{
sum += it->second;
}
相关文章:
- 如何对多维 std::vector 的所有元素求和?
- 使用 C++17 或更高版本对向量中的元素对求和的最'functional'方法?
- 在 MPI 中逐个元素对数组元素求和和收集
- 以C++递归方式对链表中的元素求和
- CUDA:所有矢量元素的级联求和
- 将彼此平行的两个 int 向量的元素求和
- 使用变换和加 () 对向量的元素进行求和和模 10^9+7<int>。有什么办法可以做到这一点吗?
- 用以下方法对数组中的元素求和的有效方法是什么
- 难以对 2D 矢量的元素求和
- 循环访问 CUDA 中的三维数组以对它们的元素求和
- 如何将函数静态应用于非类型模板包的各个元素并对结果求和
- 我如何确定我是否可以将数组中的某些元素求和为 K
- 在C++中使用do-while循环对向量的元素求和
- 在c++中对最小数组元素求和
- 递归算法对数组中值小于x的每个元素求和
- 如何使用本函数对两个字符数组进行元素相乘,并将相乘结果求和为int
- 如何对一个公共矩阵中的所有元素求和
- 通过迭代器对map的元素求和
- 如何在c++中对multimap中具有相同键的所有元素求和
- 在一个数组中查找求和为k的两个元素