【发布时间】:2020-02-26 20:39:05
【问题描述】:
问题陈述:遍历对象数组并检查对象是否存在于 unordered_set 中。
目标:我可以在一个容器中拥有数千个对象,以检查它们是否存在于另一个容器中的数百万个对象中。我选择 unordered_set 是因为它不断发现复杂性和迭代向量。我是新手,如果您有其他方法,我将不胜感激。
问题: unordered_set find 没有按预期工作,或者我的概念有误!
主要:
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
屏蔽:
#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;
};
【问题讨论】:
-
有什么问题?你得到了什么输出?你期待什么?
-
请告诉我们
Block是什么,以及编译器给你什么样的错误信息。 -
常量作为参数?如
bool Block::operator==(const std::unique_ptr<Block>& block) const { -
我没有收到任何错误信息并且代码编译正确。但是当我跑的时候,我没有得到任何输出。
-
你阻止类重载
operator==没关系,因为vector和unordered_set中的对象都是智能指针。代码是比较智能指针,而不是 Block 对象。
标签: c++ c++11 unique-ptr unordered-set