如何编写用于多映射插入和擦除功能的 API?
How to write API for insertion and erase functionality of multimap?
我正在实现一个以某种排序方式存储任何类型的值的替换容器库,我需要在 C++ 中编写 API 以使用等效的提升功能(multimap(来获取排序功能。
我正在从事一个名为RogueWave库替换的项目,我需要使用Boost库实现RWTValSortedVector
功能的功能。我需要使用 Boost 库代码为此类编写 API。
这两件事我需要在 Boost 中实现它。
-
insert(const_reference a)
-
remove(const_reference a)
RWTValSortedVector
的参考链接是,https://docs.roguewave.com/sourcepro/11/html/toolsref/rwtvalsortedvector.html
我需要这个等效的提升 API 来实现该功能。
在这里我提到了我的代码片段格式,
boost::container::multiset<data type, less<data_type> > vec;
vec.insert(data_type("value"));
vec.insert(data_type("value"));
//for erase method
vec.erase(data_type("value"));
我需要编写容器库 API,它以某种排序方式存储任何类型的值。任何人请帮助我解决这个问题。
查找要删除的实际文档:
删除自身中的第一个元素 t,使表达式 (t == a( 为真并返回真。如果没有此类元素,则返回 false。
所以,这将是一个开始:
住在科里鲁
#include <boost/container/flat_set.hpp>
#include <string>
template <typename T>
struct SortedVec {
boost::container::flat_multiset<T> _data;
auto begin() const { return _data.begin(); }
auto end() const { return _data.end(); }
bool insert(T value) {
_data.emplace(std::move(value));
return true;
}
auto erase(T const& key) {
auto r = _data.equal_range(key);
if (r.first == r.second)
return false;
_data.erase(r.first);
return true;
}
};
#include <iostream>
#include <iomanip>
int main() {
SortedVec<std::string> vec;
vec.insert("zz");
vec.insert("value");
vec.insert("value");
vec.insert("aa");
std::cout << "Before erase:";
for (auto& s : vec) std::cout << " " << std::quoted(s);
assert(vec.erase("value"));
std::cout << "nAfter 1 erase:";
for (auto& s : vec) std::cout << " " << std::quoted(s);
assert(vec.erase("value"));
std::cout << "nAfter 2 erases:";
for (auto& s : vec) std::cout << " " << std::quoted(s);
assert(!vec.erase("value"));
}
指纹
Before erase: "aa" "value" "value" "zz"
After 1 erase: "aa" "value" "zz"
After 2 erases: "aa" "zz"
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- C++擦除(如果存在)
- 在映射擦除c++期间执行循环的次数
- 为什么擦除方法会影响结束方法
- C++ 字符串类擦除成员函数的时空复杂性
- 如何编写用于多映射插入和擦除功能的 API?
- 分割错误:向量中的擦除功能
- 为什么在功能内擦除元素后不列出更新?
- 标准::矢量的擦除功能
- 尝试在矢量上使用擦除功能时"no matching function for call"
- 向量擦除功能无法正常工作
- c++ std map 的擦除功能是否释放了指针键的内存?
- 为我的类实现擦除功能
- C++没有列表::擦除的匹配功能
- 使用擦除功能从字符串中删除字符 - C++
- 矢量擦除功能不工作(简单的代码)
- 矢量中的擦除功能不删除指针?
- 如何创建<wchar_t>具有擦除(size_t pos)方法的功能向量?