集合中元素的计数(不是总计数)

发布于 2025-01-08 00:14:08 字数 1358 浏览 1 评论 0原文

我有一组 C++ 字符串。

我将插入到该集合中:

m.insert("1-2-35-2");
m.insert("1-2-36-1");
m.insert("1-2-37-2");
m.insert("1-2-38-1");
m.insert("1-2-39-2");
m.insert("2-2-40-1");
m.insert("2-2-41-2");
m.insert("2-2-42-1");
m.insert("1-2-43-2");
m.insert("1-2-44-1");
m.insert("1-2-45-2");
m.insert("1-2-46-1");
m.insert("1-2-47-2");

我想计算该集合内以 "2-"(count =3) 开头以及以“1”开头的所有字符串的计数-“(计数=10)

有什么办法可以做到吗? 我尝试使用 lower_boundupper_bound 但它给了我一些错误。

语句出现错误:

int i=it_upper-it_lower;

我正在使用 Solaris SPARC 操作系统。

我刚刚测试了这个程序,

#include <iostream>
#include <iterator>
#include <list>
using namespace std;

int main () {
  list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  list<int>::iterator first = mylist.begin();
  list<int>::iterator last = mylist.end();

  cout << "The distance is: " << distance(first,last) << endl;

  return 0;
}

它给了我编译错误:

line 13: Error: Could not find a match for std::distance<std::ForwardIterator, std::Distance>(std::list<int, std::allocator<int>>::iterator, std::list<int, std::allocator<int>>::iterator).
1 Error(s) detected.

I have a set of strings in c++.

i am inserting into that set as :

m.insert("1-2-35-2");
m.insert("1-2-36-1");
m.insert("1-2-37-2");
m.insert("1-2-38-1");
m.insert("1-2-39-2");
m.insert("2-2-40-1");
m.insert("2-2-41-2");
m.insert("2-2-42-1");
m.insert("1-2-43-2");
m.insert("1-2-44-1");
m.insert("1-2-45-2");
m.insert("1-2-46-1");
m.insert("1-2-47-2");

i want to calculate the count of all the strings inside the set which start with "2-"(count =3) and also which start with "1-"(count=10).

is there any way to do it.
I tried with lower_bound and upper_bound but its giving me some errors.

errors are coming for the statement:

int i=it_upper-it_lower;

I am using solaris SPARC OS.

i just tested this program

#include <iostream>
#include <iterator>
#include <list>
using namespace std;

int main () {
  list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  list<int>::iterator first = mylist.begin();
  list<int>::iterator last = mylist.end();

  cout << "The distance is: " << distance(first,last) << endl;

  return 0;
}

it gives me compilation error:

line 13: Error: Could not find a match for std::distance<std::ForwardIterator, std::Distance>(std::list<int, std::allocator<int>>::iterator, std::list<int, std::allocator<int>>::iterator).
1 Error(s) detected.

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

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

发布评论

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

评论(2

清醇 2025-01-15 00:14:08

对不起。错误答案
更新:
count_if是一种基于函数对元素进行计数的算法。尝试像这个例子一样:

bool struct key_part: public std::unary_function< std::string, bool >
{
    std::string _part;
    key_part(const std::string part):_part(part){}
    bool operator()(std::string &s)
    {
      return s.find(_part)!=std::string::npos;
    }
}
std::count_if( m.begin(), m.end(), key_part("1-") );

它将计算所有包含“1-”作为键一部分的元素

Sorry. Wrong answer
Update:
count_if is an algorithm to count elements based on function. Try like in this example:

bool struct key_part: public std::unary_function< std::string, bool >
{
    std::string _part;
    key_part(const std::string part):_part(part){}
    bool operator()(std::string &s)
    {
      return s.find(_part)!=std::string::npos;
    }
}
std::count_if( m.begin(), m.end(), key_part("1-") );

It will count all elements that contains "1-" as part of key

装迷糊 2025-01-15 00:14:08

如果您有支持 lambda 的现代编译器,则可以使用它们作为 的谓词count_if

auto if_s_1 = [](const std::string &s) { return s.find("1-") == 0; }
auto if_s_2 = [](const std::string &s) { return s.find("2-") == 0; }

int count1 = std::count_if(m.begin(), m.end(), if_s_1);
int count2 = std::count_if(m.begin(), m.end(), if_s_2);

If you have a modern compiler that supports lambdas, you could use those as the predicate to count_if:

auto if_s_1 = [](const std::string &s) { return s.find("1-") == 0; }
auto if_s_2 = [](const std::string &s) { return s.find("2-") == 0; }

int count1 = std::count_if(m.begin(), m.end(), if_s_1);
int count2 = std::count_if(m.begin(), m.end(), if_s_2);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文