包含独特元素的列表
List with unique elements
我需要一个容器,其中:
- 当我添加一个尚不存在的新元素时,它会添加到列表顶部
- 当我添加一个已经存在的元素时,它不会被添加,我 我在列表中获取其索引
- 插入元素后,它始终具有相同的索引,并且可以使用此索引访问它
仅靠std::set
是不够的,因为我无法使用[index]
访问元素。 两者都std::list
,因为它不存储唯一的元素。
我使用了具有list
和map
的混合解决方案,但也许有一些标准的通用模板?
我不想使用提升。每次插入后调用list::unique
都不是解决方案。
如果您只使用std::list
(或std::vector
,就此而言),如果你不想,你就不会绕过线性搜索避免重复,但您希望保留原始顺序。 一个简单的 基于std::vector
的解决方案可能是:
int
createIndex( std::vector<T>& references, T const& newValue )
{
int results = std::find( references.begin(), references.end(), newValue )
- references.begin();
if ( results == references.size() ) {
references.push_back( newValue );
}
return results;
}
或者,您可以使用std::map
:
int
createIndex( std::map<T, int>& references, T const& newValue )
{
st::map<T, int>::iterator results = references.find( newValue );
if ( results == references.end() ) {
results = references.insert(
std::make_pair( newValue, references.size() ) ).first;
}
return results->second;
}
(这假设T
支持<
。 如果没有,您必须建立一个有序的标准。 或者使用 unordered_map
并定义一个哈希代码它。
相关文章:
- C++如何通过用户输入删除列表元素
- 通过动态分配插入列表元素
- 用于编织链接列表元素的Runner Technique
- 无法在C 中删除列表元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 将列表元素移动到列表末尾的函数多次不起作用
- 交换链接列表元素
- 当删除列表元素时,在迭代器结束时会发生什么
- 为什么从不同分配器的列表中剪辑列表元素时会有错误消息?以及如何解决
- 打印出列表元素问题
- 我想通过递归获取列表元素的所有置换
- 从C++访问列表元素 (QML) 颜色
- 如何在C++visual studio 2013中将列表元素转换为文本块
- 指向删除后的列表元素的指针
- 正在将指针复制到assign运算符中的另一个列表元素
- 将列表元素插入向量,C++获取其他不需要的值
- 从unordered_set中删除列表元素
- 在C++中打印列表元素的组件
- 提取并转换 boost::p ython::list 的列表元素
- Rcpp犰狳:对列表元素的"-="操作