Xar*_*ara 1 c++ data-structures
以下是我的情景:
我必须保留扩展ASCII的所有3字节组合,如下所示:
{ { (a,a,a),(a,a,b),..........(z,z,z) } }
Run Code Online (Sandbox Code Playgroud)
所有这些组合产生一组256*256*256的大值
在我的算法中,碰巧在每次迭代之后,大集合会出现如下情况:
{(a,a,a), (a,a,b)}
{(a,a,c)}
.
.
.
.
{(z,z,z)}
Run Code Online (Sandbox Code Playgroud)
我正在使用数组的向量来实现这个.
vector<set<array<char,3> > > Partition;
Run Code Online (Sandbox Code Playgroud)
使用它的原因是一个大的集合将分解成子集.这些子集的数量是未知的,并且在每次迭代之后子集的数量可能增加,因此我使用向量.那么子集不应该包含任何元素两次,因此我使用set和数组来保持3个字符.
使用上述数据结构的问题在于计算结果需要花费大量时间.
我需要有关数据结构的建议,在我的情况下可以更有效.
我的算法的更多解释:
{(a,a,a),(a,a,b)........ (z,z,z)}
Run Code Online (Sandbox Code Playgroud)
所有这些三角板都是无序地图的关键.所有这些triplates对应于这样的特定值
(a,a,a) value=2
(a,a,b) value=2
(a,a,c) value=3
(a,a,d) value=2
.
.
.
.
.
Run Code Online (Sandbox Code Playgroud)
现在,我运行我的算法,并希望根据价值知道它们可以压缩多少:像这样
{(a,a,a) ,(a,a,b) } value=2
(a,a,c) value=3
{(a,a,d),......} value=2
Run Code Online (Sandbox Code Playgroud)
为什么我必须为value = 2创建一个单独的子集,因为根据我的算法,每当我的前一个值与当前值不同时,我必须创建一个新的集合.
嗯,你关心3 * 8b所以有24位值.相反,具有{0, 0, 0}可以有一个整数0,而不是{'a', 'a', 'a'}你可以有0x616161,因为'a' == 0x61
所有这些整数都可以存储在std :: map中,其中由3个符号组成的整数是关键.或者你可以使用数组ValueType arr[256*256*256].我建议使用数组,但是如果你只有几个值,你可以使用map.
要转换int为3个字符,您可以使用按位运算<<并在此处和此处>>阅读它们.但我希望你理解有点转移.
| 归档时间: |
|
| 查看次数: |
1224 次 |
| 最近记录: |