寻找一种优雅的方式(或我不熟悉的构造),使我可以做“反向引用”数组的等效操作。也就是说,我有一个整数数组
句柄[数字] =名称数字
有时候我知道数字,并且需要nameNumber,但是有时我只知道 nameNumber ,并且在列表中需要匹配的 [number] 数组。
整数 nameNumber 值都是唯一的,也就是说,没有两个相同的 nameNumbers ,所以每个 [number] 和< strong> nameNumber 对也是唯一的。
是否存在一种“反向引用”数组值(或其他构造)的好方法,而不必扫描整个数组以寻找匹配值(或必须更新并跟踪带有反向值的两个不同数组)集)?
答案 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)搜索。将数组分成两半,然后检查位于中心的元素是否大于或小于要查找的元素,抓住元素所在的数组的一半,然后再分为两半。您做出的每个决定都会消除数组中一半的元素。继续进行此过程,最终您将找到所需的元素。