排序和bucketize字符串列表的最佳方法

时间:2014-06-11 08:01:34

标签: algorithm sorting hash

输入

我有一个MAC地址列表(AA:AA:AA:AA:AA:AA)

目标

对列表进行排序,并对它们进行bucketize,以便共享前8个半字节的mac地址落在一个存储桶中。

示例输入

AA:AA:AA:AA:11:11  
AA:AA:AA:BB:15:BA
AA:AA:AA:AA:22:22  
AA:12:12:12:AA:15
AA:AA:AA:BB:11:11
AA:AA:AA:AA:12:12  

示例输出

AA:12:12:12:   
            AA:15
AA:AA:AA:AA:
            11:11  
            12:12
            22:22  
AA:AA:AA:BB:
            11:11
            15:BA  

我的方法

Container - std::map<std::string, std::vector<std::string> > bucket  
The map has a custom comparator function which compares 8 nibbles  
Insert 8 nibbles as key:  
    If not already present in map, add entry  
    If already present add, balance 4 nibbles into the value vector

2 个答案:

答案 0 :(得分:1)

您可以使用radix sort对列表进行排序。我建议你考虑每对十六进制数字作为排序的单个数字。

答案 1 :(得分:0)

你可以制作一个n(16)-ary树,(你也可以看作一个范围树)。