0

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

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

从给定的字符中,我想检索可以在 c++ 中使用 std::map 执行的数字。但是,一旦我用地图分配这些数字。我失去了 [a,b] 在一个括号中而 [c] 是分开的信息。我想保留这些信息。

是否有一些我可以使用的数据结构: [a,b] 可以分配连续的数字,并且我可以获得 [a,b] 在一个括号中的信息,而 [c] 是其括号中唯一的信息.

我的方法是使用 map ......但它不适合我以后找出 [a,b] 是否在同一个括号中的需要。有人可以建议一个数据结构,以满足我连续分配数字以及保留它们属于同一括号的信息的需要。

4

2 回答 2

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)
...
于 2013-03-10T16:32:55.620 回答
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;
    

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

于 2013-03-10T16:50:42.193 回答