如何在stl列表中搜索元素?

Pra*_*van 41 c++ stl

find()列表中是否有向量中的函数?

有没有办法在列表中这样做?

wkl*_*wkl 90

你使用std::findfrom <algorithm>,它同样适用于std::liststd::vector.std::vector没有自己的搜索/查找功能.

#include <list>
#include <algorithm>

int main()
{
    std::list<int> ilist;
    ilist.push_back(1);
    ilist.push_back(2);
    ilist.push_back(3);

    std::list<int>::iterator findIter = std::find(ilist.begin(), ilist.end(), 1);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于内置类型int以及std::string默认情况下的标准库类型,因为它们已operator==为它们提供了这些类型.如果您std::find在用户定义类型的容器上使用,则应该重载operator==以允许std::find正常工作:EqualityComparable概念

  • @LDS - `std :: binary_search`提供二进制搜索. (3认同)
  • 对于已排序的容器没有二进制搜索功能?懒惰的实现. (2认同)

Jan*_*cek 18

不,不是直接在std :: list模板本身.但是你可以使用std :: find算法:

std::list<int> my_list;
//...
int some_value = 12;
std::list<int>::iterator iter = std::find (my_list.begin(), my_list.end(), some_value);
// now variable iter either represents valid iterator pointing to the found element,
// or it will be equal to my_list.end()
Run Code Online (Sandbox Code Playgroud)


BЈо*_*вић 7

除了使用std :: find(来自算法)之外,您还可以使用std :: find_if(这比IMO更好,然后是std :: find),或者使用此列表中的其他查找算法


#include <list>
#include <algorithm>
#include <iostream>

int main()
{
    std::list<int> myList{ 5, 19, 34, 3, 33 };


    auto it = std::find_if( std::begin( myList ),
                            std::end( myList ),
                            [&]( const int v ){ return 0 == ( v % 17 ); } );

    if ( myList.end() == it )
    {
        std::cout << "item not found" << std::endl;
    }
    else
    {
        const int pos = std::distance( myList.begin(), it ) + 1;
        std::cout << "item divisible by 17 found at position " << pos << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)