You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效搜索constexpr初始化的已排序结构体键值数组?

基于排序结构体数组的高效二分搜索需求

我需要在源码中用constexpr初始化器初始化一个包含键值对的长数组,且已手动将数组按键排序,以便通过二分搜索高效查找。该数组元素为带键和一个(或多个)值的结构体。

示例代码如下:

struct MyArrayElement { const char* key; int value; };
constexpr MyArrayElement MyArray[] = {
 { "abc", 923 },
 { "def", 456 },
 /* ... */
 { "xyz", 178 },
};

我目前可以用STL的find_if算法查找键:

std::string key_to_find{ "xyz" };
auto const elem = find_if(std::begin(MyArray), std::end(MyArray),
  [&key_to_find](auto const& elem){ return key_to_find == elem.key; });

但find_if不知道数组已排序,无法利用这一特性实现高效搜索。我查看了std::binary_search,但它会比较整个结构体(键和值),而我只想基于键进行搜索。

我浏览了各类STL算法,没找到符合需求的实现。虽然可以轻松编写自定义二分搜索模板函数,但希望使用现成的标准算法。

我的备选方案按优先级从高到低排列:

  • 寻找可仅针对结构体键字段进行二分搜索的标准算法;
  • 寻找可constexpr构造、更适合高效搜索的容器;
  • 编写仅基于键字段搜索的自定义二分搜索模板函数;
  • 将键和值拆分为两个独立数组,但这会增加代码维护出错风险。

欢迎提供其他解决方案。

内容的提问来源于stack exchange,提问作者InTheWonderlandZoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:25:57