如何将对引用返回到自定义容器中的数据?

时间:2011-04-03 22:26:45

标签: c++ reference iterator containers std-pair

#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之类的容器具有返回对对的引用的迭代器。但这怎么可能呢?如果我正在为容器编写迭代器,我需要返回对值的引用。但如果值是成对的,我该怎么做呢?如果我需要稍微修改创建该对的数据,如上例所示,该怎么办?

我希望我的问题不要太困惑。请帮忙!

3 个答案:

答案 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