当前位置: 首页 > 知识库问答 >
问题:

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

燕嘉颖
2023-03-14

使用一段代码扫描大字符串(html),然后解析其中的任何单词。将所有实例推送到vector或pairs(单词和计数),以防它已经不存在,否则增加计数(pair的第二个元素)。

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));
    ...

获取编译错误:

In file included from C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algobase.h:71:0,
                 from C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/char_traits.h:39,
                 from C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ios:40,
                 from C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ostream:38,
                 from C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/iostream:39,
                 from webCounter.cpp:19:
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/predefined_ops.h: In instantiation of 'bool __gnu_cxx::__ops::_Iter_pred::operator()(_Iterator) [with _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:   required from '_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:   required from '_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:   required from '_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:   required from here
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/predefined_ops.h:234:30: error: no match for call to '(std::__cxx11::basic_string) (std::pair, int>&)'
  { return bool(_M_pred(*__it)); }

共有1个答案

司空学智
2023-03-14

问题是对之间没有内置的比较

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的文档

 类似资料:
  • 本文向大家介绍C++在成员函数中使用STL的find_if函数实例,包括了C++在成员函数中使用STL的find_if函数实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++在成员函数中使用STL的find_if函数的方法。分享给大家供大家参考。具体方法分析如下: 一般来说,STL的find_if函数功能很强大,可以使用输入的函数替代等于操作符执行查找功能(这个网上有很多资料,我这里

  • 有没有办法将第一个和第二个元素替换为向量中的所有元组?假设我有这样的东西: 元组的第一个元素现在是1和3,第二个元素是2和4。有容易使2和4成为第一个元素吗?

  • 本文向大家介绍php中删除数组的第一个元素和最后一个元素的函数,包括了php中删除数组的第一个元素和最后一个元素的函数的使用技巧和注意事项,需要的朋友参考一下 对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作。 (1)使用 array_pop 删除数组的

  • 当我运行此代码时: 我收到以下错误: org.openqa.selenium.InvalidSelectorException:无法计算xpath表达式'//输入[包含(@id,'name']'要留档此错误,请访问:http://seleniumhq.org/exceptions/invalid_selector_exception.html构建信息:版本:'2.20.0',修订版:'16008'

  • 这是html代码: 我想访问第5行第2列的内容。 我可以通过直接访问给出行和列编号的单元格来实现这一点:driver。findElement(By.xpath(“//table[@id='listMainTable']//tr[5]/td[2]”); 但是,我想通过使用“包含”访问单元格的内容。 我尝试了以下2种方法: 驾驶员findElement(By.xpath(“//table[@id='l

  • 我有一个数组,看起来像:。而将始终保持常数。我希望x每迭代增加100。 我就是这么做的: null null 正如您所看到的,它不是在增加值。它总是只是插入。在第一个名为pies的对象中,我希望和下一个名为cakes的对象为。 我该怎么做?