#include <cstdint>
#include <utility>
class SimpleMap {
public:
typedef std::pair<const uint32_t, const uint32_t> value_type;
static const int SIZE = 8;
uint64_t data_[SIZE];
SimpleMap() { data_ = {0}; }
// Returning a reference to the contained data.
uint64_t const& GetRawData(size_t index) {
return data_[index];
}
// Would like to return a pair reference to modified data, but how?
// The following wont work: returning reference to temporary
value_type const& GetData(size_t index) {
return value_type(data_[index] >> 32, data_[index] & 0xffffffff);
}
};
map
之类的容器具有返回对对的引用的迭代器。但这怎么可能呢?如果我正在为容器编写迭代器,我需要返回对值的引用。但如果值是成对的,我该怎么做呢?如果我需要稍微修改创建该对的数据,如上例所示,该怎么办?
我希望我的问题不要太困惑。请帮忙!
答案 0 :(得分:4)
您没有存储对,因此您无法返回对存储对的引用。按价值返回。
如果您的数组是value_type data_[SIZE];
,您当然可以返回对这些对的引用 - 那么您需要根据需要为uint64_t
构建GetRawData
,然后返回 作为值而不是引用。
答案 1 :(得分:3)
如果要返回修改后的数据(而不是直接存储在容器中的内容),则无法返回引用。
答案 2 :(得分:1)
在这里,查看std::pair。在地图中,该对是键到值的映射:
std::pair<KeyType,ValueType>
因此您可以通过以下方式访问该值:
ValueType value = pairPtr->second;
// or
ValueType value = pair.second;
返回对稍后要修改的值的引用很简单,这是一个示例:
const size_t arSize = 8;
pair<int,int> arrr[arSize];
int& value = arrr[0].second;
value = 9;
int returnedValue = arrr[0].second;//you'll notice this equals 9