如何编写用于多映射插入和擦除功能的 API?

How to write API for insertion and erase functionality of multimap?

本文关键字:功能 擦除 API 插入 何编写 用于 映射      更新时间:2023-10-16

我正在实现一个以某种排序方式存储任何类型的值的替换容器库,我需要在 C++ 中编写 API 以使用等效的提升功能(multimap(来获取排序功能。

我正在从事一个名为RogueWave库替换的项目,我需要使用Boost库实现RWTValSortedVector功能的功能。我需要使用 Boost 库代码为此类编写 API。

这两件事我需要在 Boost 中实现它。

  1. insert(const_reference a)

  2. 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"