如何使用类在c ++容器中搜索元素

时间:2018-02-12 05:43:57

标签: c++

我有一个代码,它使用一个类及其成员来查找容器内的元素,例如下面给出的向量。我正在使用find函数来获取一个元素,但是看到一个错误“C2678 binary'==:'找不到运算符,它采用了'file_element'类型的左手操作数。”

class file_element
{
public:
    int line_no;
    std::string line;
};
int main(int argc, char *argv[])
{

    std::vector<file_element> elements
    {
        {1, "This"},
        {1, "is"},
        {1, "Arif"},
        {1, "."},
        {2, "I"},
        {2, "work"}
    };

    std::vector<file_element>::iterator it = find(elements.begin(), elements.end(), '.');
    if ( it != elements.end())
        std::cout << "element: " << (*it).line << std::endl;
    else
        std::cout << "element not found " << std::endl;

    std::cin.get();
    return 0;
}

我看到的错误似乎与if定义条件的位置相符。我编写的代码与大多数互联网示例的编写方式相同。有什么问题可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

当你find给出'.'时,你期望find获得你想要的元素?编译器无法读懂你的想法。

operator== (file_element, char)会尝试使用find_if来查找您的元素,但没有定义此类运算符。

您可以定义运算符或提供函数,并使用std::vector<file_element>::iterator it = std::find_if(elements.begin(), elements.end(), [](const file_element& element) { return element.line == "."; // or something }); ,如下所示:

{{1}}