排序对象的向量以进行二进制搜索

亚历山德罗斯

我有以下课程:

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)。很抱歉出现菜鸟问题。我指望您的帮助。

ro

你需要一个自定义的比较函数,它有两个EdgeExtended对象和你比较感兴趣的领域,你可以传递给两个sortbinary_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么对排序后的向量进行二进制搜索比std :: set查找要慢?

来自分类Dev

使用向量进行二进制搜索

来自分类Dev

二进制搜索树-排序?

来自分类Dev

使用二进制搜索来搜索向量的上限

来自分类Dev

我可以对导航列表进行排序并进行二进制搜索吗?

来自分类Dev

如何对结构向量进行二进制搜索并在适当的索引处插入

来自分类Dev

在许多排序数组中进行二进制搜索

来自分类Dev

使用二进制搜索对未列出的数组进行排序?

来自分类Dev

在已排序的文本文件中进行二进制搜索

来自分类Dev

在许多排序数组中进行二进制搜索

来自分类Dev

如何优化向量的二进制搜索?

来自分类Dev

在二进制搜索树中搜索Word对象

来自分类Dev

二进制搜索排序的多个项目

来自分类Dev

将排序的数组插入二进制搜索树

来自分类Dev

排序矩阵中的二进制搜索

来自分类Dev

排序数组并使用二进制搜索

来自分类Dev

重新排序二进制搜索树“就地”

来自分类Dev

C#-二进制搜索(排序的)字典

来自分类Dev

C#使用比较器进行二进制搜索的对象列表

来自分类Dev

在std :: vector中进行二进制搜索

来自分类Dev

在DateTime范围内进行二进制搜索

来自分类Dev

在c上进行二进制搜索,而while循环

来自分类Dev

如何对面板列表进行二进制搜索

来自分类Dev

用Java进行二进制搜索

来自分类Dev

在std :: string数组上进行二进制搜索

来自分类Dev

用Python进行二进制搜索

来自分类Dev

在std :: vector中进行二进制搜索

来自分类Dev

使用二进制搜索进行简单的自动完成

来自分类Dev

使用nextafter()进行二进制搜索