2
#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には、ペアへの参照を返すイテレータがあります。しかし、それはどのように機能しますか?コンテナにイテレータを書き込んでいる場合は、値への参照を返す必要があります。しかし、値がペアの場合、どうすればよいですか?そして、上記の例のように、そのペアを作成する際にデータをわずかに変更する必要がある場合はどうなりますか?

私の質問があまり混乱していないことを願っています。助けてください!

4

3 に答える 3

4

ペアを保存していないため、保存したペアへの参照を返すことはできません。代わりに値で返します。

もちろん、配列がvalue_type data_[SIZE];これらのペアへの参照を返すことができる場合は、オンデマンドでforを作成し、それを参照ではなく値として返す必要ありuint64_tます。GetRawData

于 2011-04-03T22:30:04.837 に答える
3

(コンテナに直接格納されているものではなく)変更されたデータを返す場合、参照を返すことはできません。

于 2011-04-03T22:30:37.770 に答える
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
于 2011-04-03T22:31:22.020 に答える