c++索引到索引映射
C++ index-to-index map
我有一个id(整数)列表。它们以一种非常有效的方式排序,因此我的应用程序可以轻松地处理它们,例如
9382
297832
92
83723
173934
(这个排序在我的应用程序中非常重要)。
现在我面临的问题是必须访问另一个向量中ID的某些值。
例如,ID 9382的某些值位于someevectorb[30]上。
我一直在用
const int UNITS_MAX_SIZE = 400000;
class clsUnitsUnitIDToArrayIndex : public CBaseStructure
{
private:
int m_content[UNITS_MAX_SIZE];
long m_size;
protected:
void ProcessTxtLine(string line);
public:
clsUnitsUnitIDToArrayIndex();
int *Content();
long Size();
};
但是现在我将UNITS_MAX_SIZE提高到400.000,我得到页面堆栈错误,这告诉我我做错了什么。我认为整个方法不是很好。
如果我想在不同的向量中找到一个ID,如果"位置"不同,我应该使用什么?
ps:我正在寻找一些简单的东西,可以很容易地从文件中读取,也可以很容易地序列化到文件。
如果你想要一个从int到int的映射,并且你的索引号不是连续的,你应该考虑一个std::map
。在本例中,您可以这样定义它:
std::map<int, int> m_idLocations;
映射表示两个类型之间的映射。第一种类型是"键",用于查找第二种类型"值"。对于每个id查找,您可以使用:
插入它m_idLocations[id] = position;
// or
m_idLocations.insert(std::pair<int,int>(id, position));
您可以使用以下语法查找它们:
m_idLocations[id];
通常,stl中的std::map
是使用红黑树实现的,它的查找速度为O(log n)。这比你从巨大的数组中获得的O(1)稍慢,但是它实质上更好地利用了空间,除非你存储真正巨大的数字或做大量的查找,否则你不太可能注意到实践中的差异。
作为对一些评论的回应,我认为有必要指出,从O(1)到O(log n)的移动会对应用程序的速度产生重大影响,更不用说从固定内存块到基于树的结构的实际速度问题了。然而,我认为重要的是首先表示你想说的(int-to-int)映射,以避免过早优化的陷阱。
在您表示了这个概念之后,您应该使用分析器来确定速度问题是否存在以及在哪里。如果你发现地图正在引起问题,那么你应该考虑用你认为更快的东西替换你的地图。确保测试优化是否有帮助,并且不要忘记包含一个大注释,说明您正在表示的内容以及为什么需要更改
如果没有其他工作,您可以在构造函数中动态分配数组。这将移动堆上的大数组并避免页面堆栈错误。你还应该记得在破坏clsUnitsUnitIDToArrayIndex
时释放资源
但是其他成员也建议使用std::vector或std::map
可能你得到stackoverflow错误由于int m_content[UNITS_MAX_SIZE]。数组是在堆栈上分配的,400000对于堆栈来说是一个相当大的数字。您可以使用std::vector,它是动态分配的,您可以返回vector成员的引用以避免复制操作:
std::vector<int> m_content(UNITS_MAX_SIZE);
const std::vector<int> &clsUnitsUnitIDToArrayIndex::Content() const
{
return m_content;
}
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- Azure Kinect 使用正文索引映射裁剪正文
- C++ 中集合和映射中值的lower_bound索引
- 使用无序映射进行错误索引
- Rust 在索引时是否隐式创建映射条目,例如C++
- 为什么在将单词从文本文件C++到行进行多重映射时获得额外的索引值
- 创建按顺序索引的有序映射
- 将 [] 索引到无序映射时出现段错误
- 找到唯一向量的索引和逆映射
- 将值 (mapped_type) 从映射复制到矢量,给定从键到索引的映射
- 如何将数组索引存储在映射中
- 使用带有内存映射索引的Flann
- C 索引中的字符串映射而无需分配
- 使用值为 std::shared_ptr的映射是具有多索引类列表的良好设计选择
- C++多索引映射实现
- 是否有理由使用字符串 => 索引到向量的映射,而不是字符串 => 对象?
- 如何访问映射中从字符串到向量的向量中的索引
- 索引映射的有效算法
- c++索引到索引映射
- 如何将矩阵的索引映射到一维数组(c++)