无法在使用自定义运算符==()的c ++无序集合中找到用户定义的类型>> [

问题描述 投票:0回答:1

问题陈述:

遍历对象数组,并检查对象是否存在于unordered_set中。

问题:

unordered_set查找未按预期运行,或者我弄错了概念!

Main:

int main() { std::vector<std::unique_ptr<Block>> vertices; vertices.push_back(std::make_unique<Block>("mod1", "work")); vertices.push_back(std::make_unique<Block>("mod2", "work")); vertices.push_back(std::make_unique<Block>("mod3", "work")); std::unordered_set<std::unique_ptr<Block>> undefs; undefs.insert(std::make_unique<Block>("mod1", "work")); undefs.insert(std::make_unique<Block>("mod2", "work")); for(auto& vertex : vertices) { auto search = undefs.find(vertex); if(search != undefs.end()){ std::cout << "Block: " << vertex->getName() << "\n"; } } }

块类重载:

bool Block::operator==(std::unique_ptr<Block>& block) const { return block->getName() == mName; }

预期输出:

mod1

mod2

Block:

#pragma once #include <string> #include <memory> using std::string; class Block { private: string mName; string mLib; public: Block(string const& name, string const& lib); string getName() const; string getLib() const; bool operator==(std::unique_ptr<Block>& block) const; };
问题陈述:遍历对象数组,并检查对象是否存在于unordered_set中。问题:unordered_set查找未按预期运行,或者我弄错了概念! Main:int ...
c++ c++11 unique-ptr unordered-set
1个回答
0
投票
unordered_set需要散列函数和比较函数。您正在使用std::unique_ptr的现有哈希和比较功能,这绝对不是您想要的。
© www.soinside.com 2019 - 2024. All rights reserved.