gpt4 book ai didi

c++映射数组运算符重载启用设置值

转载 作者:行者123 更新时间:2023-11-30 03:52:18 24 4
gpt4 key购买 nike

我尝试做有序 map (简单非常简单)我想重载 map “[] = value”运算符。那是数组运算符后面的等号但如何?我有这个:

template <typename  K, class V>
class OrderedMap
{
public:
OrderedMap(){};
~OrderedMap(){};
void setValue(K _k);
void operator[] (K _k);
private:
std::vector<K> insertOrder;
std::tr1::unordered_map<K, V> myTable;
};

template <typename K, class V>
OrderedMap<K, V>::setValue(K _k)
{
myTable[_k];
insertOrder.push_back(_k);
}

template <typename K, class V>
void OrderedMap<K, V>::operator[] (K _k)
{
......
}

我已经设置好数组并正常工作,但是如何添加选项以通过数组运算符向键添加值所以这将是有效的

m_Map[CONST1] = "value"

最佳答案

基本上 operator[] 是一个函数调用,它只向您的类提供括号内的参数。

所以在 C++ 中,您实际上使用 operator[] 与我们说的 Delphi 或 C# 有点不同:operator[] 通常返回对集合内项目的引用:

myContainer[3] = value;

实际上将解析为以下内容:

MyItem refToObj& = myContainer[3];
refToObj = value;

operator[] 应具有以下形式

MyItem& MyContainer::operator[](int);

如果由于某种原因你不能使用引用(例如你的容器中实际上没有 MyItem 实例并且 operator[] 应该将对象转换为不同的类型)那么唯一的方法是使用“帮助对象”:

MyContainer::Helper helper = myContainer[3];
helper = value;

operator[] 应具有以下形式

MyContainer::Helper MyContainer::operator[](int);

哪里MyHelper是一个重载 operator= 的特殊类,然后执行容器特定的转换(如果您对这种方法感兴趣,请参阅 vector<bool>)。

编辑:回到问题上来:我有点不确定你到底想完成什么,但我认为你需要使用“Helper”方法:

class OrderedMap
{
class ItemHelper
{
public:
ItemHelper(OrderedMap& map, K key): m_map(map), m_key(key) {}

//writing a value
V& operator=(const V& v)
{
m_map.setValue(m_key);
m_map.myTable[m_key] = v;
}

//reading a value
operator const V&() { return m_map[k]; }
private:
K m_key;
OrderedMap& m_map;
};
};

关于c++映射数组运算符重载启用设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774112/

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