gpt4 book ai didi

c++ - vector 和 map C++ 的通用迭代器

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:00 24 4
gpt4 key购买 nike

我有一个“通用”容器,它有一个底层 map 或 vector 。例如:

class Container
{
typedef variant<vector<string>, map<string, string>> Data;

public:
iterator begin();
iterator end();

private:
Data mData;
};

我想给用户一个通用的迭代器。取消引用这样的迭代器很容易,因为它总是可以返回一对值。

struct pair
{
string key;
string value;
}

在数组的情况下,键值将是一个索引。

但我不确定如何正确处理迭代器。目前我正在尝试做这样的事情:

class iterator
{
public:
iterator(vector<string>::iterator it);
iterator(map<string, string>::iterator it);
..

private:
bool m_isMap;
vector<string>::iterator it;
map<string, string>::iterator it;
};

但是这个实现有点乱。有没有更好的方法?或者甚至是准备就绪的提升解决方案?

最佳答案

  1. 然而,通常要做的是将采用迭代器的函数作为模板函数,并为所需的各种迭代器实例化它。

  2. 您可以使用 boost 的 any_iterator:

  3. 您可以使用 Boost Property Map,它正是创建一个一致的接口(interface)来使用键获取/放置属性。

    • 对 vector 使用make_iterator_property_map(索引是键)
    • 对 map 使用make_assoc_property_map(使用 map 的键)

当然这还是需要代码把propertymap作为泛型参数(因为类型不同)。但是,您可以使用 dynamic_property_map 覆盖它:

  1. 滚动你自己的类型删除。您可以使用 Boost Type Erasure 作为构建基 block (它很可靠)。但当然,你也可以在没有提升的情况下做到这一点。这可能是一个好处

关于c++ - vector 和 map C++ 的通用迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com