尝试使用FIND_IF函数将值定位在第一个元素对的矢量中

Trying to use find_if function to locate value in vector of pairs by first element

本文关键字:元素 第一个 定位 FIND 函数 IF      更新时间:2023-10-16

具有扫描大字符串(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));
    ...

获取编译错误:

在C中包含在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/gc/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:使用_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(_randomomAcccesterator,_randomomamaccesterator,_randomomaccesterator,_randomomaccccesccessitarator,_randomomacccessceSterator,__randomAccessitator,__pricatiatiate,_pricatiate,_pricatiate,_pricatiate,_pricatiacatiate,_pricatiacatiate,std,:rando_access_iterator_tag([with _randomAccessiterator = __gnu_cxx :: __ normal_iterator,int>*,std :: vector :: vector,int>>>>>>>>;_predicate = __gnu_cxx :: __ ops :: _ iter_pred>]'c:/tdm-gcc-32/lib/gcc/gc/mingw32/5.1.0/include/c     /bits/stl_algo.h:161:23:需要'_iterator std :: __ find_if(_iterator,_iterator,__erterator,__terator,__predicator,_predicate(_iterator = __gnu_cxx :: __ normal_iterator,int>*,std :: vector,int>>>>>;_predicate = __gnu_cxx :: __ ops :: _ iter_pred>]'c:/tdm-gcc-32/lib/gcc/gc/mingw32/5.1.0/include/c  /bits/stl_algo.h:3815:28:需要'_iiter std :: find_if(_iiter,_iiter,_iiter,_iiter,_predicate([with with witw with witw with with _ predicate([_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 ::配对,int>&('  {return bool(_m_pred(*__ it((;}

问题是pair <string,int>与似乎是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
              });

lambda表达式的文档

也就是说,

std::map<string, int> freqmap;
如果允许,

可能是此任务的更好选择。几乎所有代码都简化为

freqmap[currentword]++;

std::map

的文档