我在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_bound
和upper_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.
答案 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);