获取 C++ 中的前 N ​​个元素多重集合

发布于 2024-12-28 02:38:02 字数 87 浏览 0 评论 0原文

如何从多重集结构中获取前 N 个元素,而不需要不断获取第一个 (.begin()) 元素然后删除它?

我只想对前 N 个元素求和而不影响多重集。

How can I get the first N elements from a multiset structure, without constantly getting the first (.begin()) element and then erasing it?

I just want to sum the first N elements without affecting the multiset.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花间憩 2025-01-04 02:38:02

我只想对前 N 个元素求和而不影响多重集。

#include <numeric>
#include <iterator>

// ...

int sum = std::accumulate(my_set.begin(), std::next(my_set.begin(), N));

std::next 是 C++11 库的补充。这是针对较旧编译器的解决方案:

std::multiset<int>::iterator it = my_set.begin();
std::advance(it, N);
int sum = std::accumulate(my_set.begin(), it);

两种解决方案都会对多重集进行两次迭代。如果你想防止这种情况,请使用手动循环:

int sum = 0;
std::multiset<int>::iterator it = my_set.begin();
for (int i = 0; i < N; ++i)
{
    sum += *it++;
}

I just want to sum the first N elements without affecting the multiset.

#include <numeric>
#include <iterator>

// ...

int sum = std::accumulate(my_set.begin(), std::next(my_set.begin(), N));

std::next is a C++11 library addition. Here is a solution for older compilers:

std::multiset<int>::iterator it = my_set.begin();
std::advance(it, N);
int sum = std::accumulate(my_set.begin(), it);

Both solutions iterate over the multiset twice. If you want to prevent that, use a manual loop:

int sum = 0;
std::multiset<int>::iterator it = my_set.begin();
for (int i = 0; i < N; ++i)
{
    sum += *it++;
}
孤君无依 2025-01-04 02:38:02

您可以像遍历任何其他容器一样遍历 multiset,并在看到 n 元素后停止。

You could iterate over the multiset like you would over any other container, and stop once you've seen n elements.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文