搜索可以像地图一样工作的数据结构以及检索其他信息

时间:2013-03-10 16:22:16

标签: c++ c

我有以下字符,如果它们在同一个括号中,我想连续分配数字。 E.g。

   [a,b],[c],[d,e],[f,g],[h]
   a=0, b=1,c=2,d=3,e=4,f=5,g=6,h=7

从给定的char我想要检索我可以用c ++中的std :: map做的数字。但是,一旦我用地图分配这些数字。我放松了[a,b]在一个括号中的信息,[c]是分开的。我希望保留这些信息。

是否有一些我可以使用的数据结构:[a,b]可以分配连续的数字,我也可以得到[a,b]在一个括号中的信息,[c]是唯一的在它的括号内。

我的方法是使用地图...但它不符合我后来发现[a,b]是否在同一个括号中的需要。有人可以建议一个数据结构,以满足我连续分配数字的需要,并保留它们属于同一支架的信息。

2 个答案:

答案 0 :(得分:3)

我不清楚你在问什么,但这个答案是基于我目前的解释。你不能只使用一个值类型来存储关于char所在的组的额外信息吗?例如:

struct value_type
{
    int num;
    int group;
};
....
std::map<char, value_type> m;
m['a'].num   = 0;
m['a'].group = 0;
m['b'].num   = 1;
m['b'].group = 0;   // same group as 'a'
m['c'].num   = 2;
m['c'].group = 1;   // new group
// etc...

// testing if 'a' and 'b' are in the same group
if (m['a'].group == m['b'].group)
...

答案 1 :(得分:1)

正如其他人所指出的,没有完全符合您需求的数据结构(据我所知)。但是,您可以轻松地自己设计一个。一些建议:

  • 将每个字符映射到包含括号和字符编号的元组或结构:

    struct CharData { int group; int characterNumber; };
    std::map<char, CharData> data;
    
  • 使用两个容器:一个包含字符组/括号列表,另一个包含普通地图:

    std::vector<std::vector<char> > groups;  // Store groups in this container.
    std::map<char, int> mapping; // Store mapping to integers in this container.
    
  • 使用地图矢量:

    std::vector<std::map<char, int> > data;
    

您可以轻松地在这些表示之间进行转换。但它们对于典型操作具有不同的复杂性。如果对您来说很重要,您可以检查某个字符是否在某个组中并访问它所映射的数字,那么请选择第四个解决方案。如果你需要经常列出一个组的所有字符,或者一个字符可以包含在多个组中,那么我更喜欢第二种方法。如果角色可以是多个组的元素,并且您希望根据组将其映射到不同的数字,则最后一种方法可能很有用。