我正在实现一个替换容器库,该库以某种排序的方式存储任何类型的值,我需要用C ++编写API以通过使用等效的boost功能(多图)来获得Sorted功能。
我正在一个名为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
我需要这个等效的boost 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,该API以某种排序方式存储任何类型的值。任何人都可以帮助我解决这个问题。
答案 0 :(得分:0)
查找实际的documentation for remove:
删除self中的第一个元素t,以使表达式(t == a)为true,并返回true。如果没有这样的元素,则返回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"