C++ C++;正确的数据结构

C++ C++;正确的数据结构,c++,C++,我正在寻找正确的数据结构,以便在传入流中逐个字母地存储给定类型的字符数。我预先知道字母表的大小(大约10个),但数据流大约为1gb。主要标准是快速访问。可以使用带有适当选择的枚举的列表使事情更清楚,但这是最好的方法吗?一个简单的数组最好: int计数器[字母表的大小]; 一个简单的数组最适合: int计数器[字母表的大小]; >/p>考虑到性能要求,考虑在内存中的强布局;从而有助于减少缓存未命中 有点像 const std::size_t SIZE = 10; int count[SIZE

我正在寻找正确的数据结构,以便在传入流中逐个字母地存储给定类型的字符数。我预先知道字母表的大小(大约10个),但数据流大约为1gb。主要标准是快速访问。可以使用带有适当选择的枚举的列表使事情更清楚,但这是最好的方法吗?

一个简单的数组最好:


int计数器[字母表的大小];

一个简单的数组最适合:


int计数器[字母表的大小];

>/p>考虑到性能要求,考虑在内存中的<>强布局;从而有助于减少缓存未命中

有点像

const std::size_t SIZE = 10;
int count[SIZE] = {};
// or
std::vector<int> count(SIZE, 0);
const std::size\u t size=10;
整数计数[大小]={};
//或
标准::向量计数(大小,0);
如果需要将计数与字符一起存储,则“对”可能会有所帮助

struct Datum {
  Datum() : c('\0'), count(0) {}
  char c; // assuming the "alphabet" is in the char range
  int count;
};

std::vector<Datum> count(SIZE);
结构基准面{
Datum():c('\0'),计数(0){
char c;//假设“字母表”在char范围内
整数计数;
};
std::病媒计数(大小);

并提供一些材料和经验证据,说明为什么应该支持
std::vector
。与以往一样,<强>测量应<<强>,以验证给定的数据结构、算法和相关数据访问等性能:

< P>给定性能要求,考虑在内存中的<>强布局>;从而有助于减少缓存未命中

有点像

const std::size_t SIZE = 10;
int count[SIZE] = {};
// or
std::vector<int> count(SIZE, 0);
const std::size\u t size=10;
整数计数[大小]={};
//或
标准::向量计数(大小,0);
如果需要将计数与字符一起存储,则“对”可能会有所帮助

struct Datum {
  Datum() : c('\0'), count(0) {}
  char c; // assuming the "alphabet" is in the char range
  int count;
};

std::vector<Datum> count(SIZE);
结构基准面{
Datum():c('\0'),计数(0){
char c;//假设“字母表”在char范围内
整数计数;
};
std::病媒计数(大小);

并提供一些材料和经验证据,说明为什么应该支持
std::vector
。一如既往,应进行测量以验证给定数据结构、算法和相关数据访问等的性能。

对于存储,您可以尝试制作字母编码表和简单字符数组(字符足以存储10个不同字符中的1个)。比如:

map-m;
m['A']=1;
m['B']=2;
...
字符数据[大小];
对于(int i=0;i

或者将两个项目压缩成一个字符。

为了存储,您可以尝试制作字母编码表和简单的字符数组(字符足以存储10个不同字符中的1个)。比如:

map-m;
m['A']=1;
m['B']=2;
...
字符数据[大小];
对于(int i=0;i

或者将两个项目压缩为一个字符。

最佳方式取决于具体情况和个人意见。映射(字符值->使用长计数)如何?数据结构的用途是什么?存储数据?Processing?将用于在步骤1中存储来自流的数据。之后,还有一个附加步骤,10个数字中的每一个都将用于其他计算的少量次数。主要标准是快速access@user3684792. 如果快速访问是一件大事。相邻数据布局更好;这将有助于避免缓存未命中。获取容器和数据类型的连续右键。如果字符类型很小(不大于字宽),我不需要间接寻址,只需按原样存储字符,而不是按字母表的键。你打算使用什么类型的角色?最好的方式取决于环境和个人意见。映射(字符值->使用长计数)如何?数据结构的用途是什么?存储数据?Processing?将用于在步骤1中存储来自流的数据。之后,还有一个附加步骤,10个数字中的每一个都将用于其他计算的少量次数。主要标准是快速access@user3684792. 如果快速访问是一件大事。相邻数据布局更好;这将有助于避免缓存未命中。获取容器和数据类型的连续右键。如果字符类型很小(不大于字宽),我不需要间接寻址,只需按原样存储字符,而不是按字母表的键。您将使用哪种类型的字符?
int count[256]可以避免间接字母表->索引。
整数计数[256]可以避免间接字母表->索引。