我有以下课程:
struct EdgeExtended {
int neighborNodeId;
int weight;
int arrayPointer;
bool isCrossEdge;
};
我想要一个这样的对象的向量,按neighborNodeId对其进行排序。然后,我想搜索特定的neighborNodeId,并通过二进制搜索返回对向量内找到的对象的引用。以前,我为此使用过地图,因此它是这样的:
map<int, EdgeExtended> neighbours;
.....
auto it = neighbours.find(dnodeId);
if (it != neighbours.end()) {
edgeMap = it->second;
}
代替
map<int, EdgeExtended> neighbours;
我希望有
vector<EdgeExtended> neighbours;
并保留与旧代码相同的数量。
我想确定矢量是否比地图更快,因为我正在构建数千个矢量(或地图),并且每个矢量(地图)都相对较小(〜10个项)。我不知道如何a)使对象可以按neighborNodeId排序,以及b)如何使用二进制搜索来搜索类的特定成员(neighborNodeId)。很抱歉出现菜鸟问题。我指望您的帮助。
你需要一个自定义的比较函数,它有两个EdgeExtended
对象和你比较感兴趣的领域,你可以传递给两个sort
和binary_search
分别为第三或第四个参数。
可以使用lambda函数方便地完成它:
auto Comp = [](const EdgeExtended& e1, const EdgeExtended& e2)
{
return e1.neighborNodeId < e2.neighborNodeId;
};
如果您使用的是C ++ 11之前的版本,请编写一个带有重载的类operator()
:
struct Comp {
bool operator()(const EdgeExtended& e1, const EdgeExtended& e2) const
{
return e1.neighborNodeId < e2.neighborNodeId;
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句