【问题标题】:c++ indexed container with o(1) lookup具有 o(1) 查找的 c++ 索引容器
【发布时间】:2018-01-22 03:14:23
【问题描述】:

我要将字符存储在某个容器中,然后从字符串中获取字符并从所述容器中的字符串中查找字符的索引。 我还需要做相反的事情,获取索引并找出其中的字符。

所以更像是:

container<char> c;
int index = c.indexOf('a');
char letter = c[12];

我不关心插入或删除操作。

我想最好的解决方案是只使用字符串或字符表。 然后做:

int index = 'a'-myString[0]; //for lookup
char c = myString[index];    //for index

【问题讨论】:

  • 查找什么?
  • 在发布此之前您是否进行过任何研究?
  • mapunordered_map 怎么样?
  • 是的,我一直在做一些研究并尝试不同的东西。 Map 不会帮助我,我可以声明一个 map 并且按键查找会很快。但是找到索引后面的键会很慢。 Set似乎也不符合我的期望。这听起来像是哈希表的工作?
  • @AleksanderNaumenok 这应该是问题的一部分,而不仅仅是评论。两张地图呢?然后您可以在两个方向上快速查找

标签: c++ indexing find dataset containers


【解决方案1】:

能够在两个方向上查找的通用数据结构是双向映射。如果使用哈希表实现,它应该具有恒定的查找复杂性。

现在,如果我们可以假设char 是 8 位宽,并且您的索引是连续的,那么我们可以使用一个非常简单的数据结构:只需将字符存储在一个数组中。使用另一个大小为1 &lt;&lt; CHAR_BIT 的数组来存储每个字符的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2012-05-15
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多