问题陈述:
遍历对象数组,并检查对象是否存在于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 ...
unordered_set
需要散列函数和比较函数。您正在使用std::unique_ptr
的现有哈希和比较功能,这绝对不是您想要的。