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

时间:2012-02-21 13:04:22

标签: c++ stl set

我在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 - ”开头(count = 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.

2 个答案:

答案 0 :(得分:2)

对不起。错误答案
更新 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-”的所有元素计为键

的一部分

答案 1 :(得分:0)

如果你有一个支持lambdas的现代编译器,你可以使用它们作为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);