尝试使用 find_if 函数通过第一个元素来查找成对向量中的值

Sta*_*man 2 c++ gcc vector c++11

使用一段代码来扫描大字符串(html),然后解析其中的任何单词。如果尚不存在,则将所有实例推送到向量或对(单词和计数),否则增加计数(对的第二个元素)。

vector < pair <string,int> > vect; 
vector < pair <string,int> >::iterator it;

    ...

it = find_if (vect.begin(), vect.end(), currentword);
if (it != vect.end())
        it->second++;
else 
    vect.push_back( make_pair(currentword, 1));
    ...
Run Code Online (Sandbox Code Playgroud)

出现编译错误:

在 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algobase.h:71:0 包含的文件中,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/char_traits.h:39,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ios:40,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ostream:38,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/iostream:39,
                 来自 webCounter.cpp:19:
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/predefined_ops.h: 在 'bool __gnu_cxx::__ops::_Iter_pred::operator()(_Iterator) 的实例化中 [与 _Iterator = __gnu_cxx::__normal_iterator, int>*, std::vector, int>>>; _Predicate = std::__cxx11::basic_string]':
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algo.h:120:14:需要从 '_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std: :random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator, int>*, std::vector, int> > >; _Predicate = __gnu_cxx::__ops::_Iter_pred >]'
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algo.h:161:23:需要 '_Iterator std::__find_if(_Iterator, _Iterator, _Predicate) [with _Iterator = __gnu_cxx::__normal_iterator, int>*, std::vector, int>>>; _Predicate = __gnu_cxx::__ops::_Iter_pred >]'
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algo.h:3815:28:需要 '_IIter std::find_if(_IIter, _IIter, _Predicate) [with _IIter = __gnu_cxx::__normal_iterator, int>*, std::vector, int>>>; _Predicate = std::__cxx11::basic_string]'
webCounter.cpp:68:58:从这里需要
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/predefined_ops.h:234:30:错误:与调用 '(std::__cxx11::basic_string) 不匹配(std::pair, int>&)'
  { 返回 bool(_M_pred(*__it)); }

use*_*301 5

pair <string,int>问题是 a和看似 a之间没有内置比较string。您必须提供一份。例如。

it = find_if (vect.begin(), 
              vect.end(), 
              [currentword](const pair <string,int>& p){ // this is a lambda expression
                  return p.first == currentword; // compare strings
              });
Run Code Online (Sandbox Code Playgroud)

Lambda 表达式的文档

也就是说,

std::map<string, int> freqmap;
Run Code Online (Sandbox Code Playgroud)

如果允许的话,可能是这项任务的更好选择。几乎所有代码都简化为

freqmap[currentword]++;
Run Code Online (Sandbox Code Playgroud)

文档用于std::map