繁体   English   中英

一组元素的数量(不是总数)

[英]count of elements in a set (not total count)

我在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-”(计数= 3)开头,也以“ 1-”(计数= 10)开头的字符串的计数

有没有办法做到这一点。 我尝试了lower_boundupper_bound但它给了我一些错误。

该语句出现错误:

int i=it_upper-it_lower;

我正在使用solaris SPARC OS。

我刚刚测试了这个程序

#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.

抱歉。 错误的答案
更新: 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-”的元素作为键的一部分

如果您有支持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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM