什么C构造将允许我“反向引用”数组?

时间:2018-11-30 20:43:42

标签: c

寻找一种优雅的方式(或我不熟悉的构造),使我可以做“反向引用”数组的等效操作。也就是说,我有一个整数数组

句柄[数字] =名称数字

有时候我知道数字,并且需要nameNumber,但是有时我只知道 nameNumber ,并且在列表中需要匹配的 [number] 数组。

整数 nameNumber 值都是唯一的,也就是说,没有两个相同的 nameNumbers ,所以每个 [number] 和< strong> nameNumber 对也是唯一的。

是否存在一种“反向引用”数组值(或其他构造)的好方法,而不必扫描整个数组以寻找匹配值(或必须更新并跟踪带有反向值的两个不同数组)集)?

2 个答案:

答案 0 :(得分:1)

我不知道使用C ++和boost库是否可以接受。如果是,则可以使用boost::bimap<X, Y>

  

Boost.Bimap是C ++的双向地图库。使用Boost.Bimap,您可以创建关联容器,其中两种类型都可以用作键。可以将bimap视为std :: map和std :: map的组合。

答案 1 :(得分:1)

如果数组已排序并且知道其长度,则可以对数组中的元素进行二进制搜索。这将是O(n log(n))搜索,而不是您对数组进行O(n)搜索。将数组分成两半,然后检查位于中心的元素是否大于或小于要查找的元素,抓住元素所在的数组的一半,然后再分为两半。您做出的每个决定都会消除数组中一半的元素。继续进行此过程,最终您将找到所需的元素。