私はこの簡単なコードを持っています:
std::vector<std::map<double,double>> v;
//populate v
//we know each map already has correct key order (enforced by c++)
//but i also want to make sure the different maps have correct key order
//this is how I do it using a pointer:
const double *last_key = nullptr;
for (const auto &map : v)
{
if (map.size() > 0) //ignore empty maps
{
if (last_key)
{
const auto &new_key = map.cbegin()->first;
if (!(*last_key < new_key))
throw std::runtime_error("invalid key order");
}
last_key = &(--map.cend())->first;
}
}
これはポインタの良い使い方ですか?代わりにどのようにしますか?
私が知っている唯一の本当の代替手段(ポインターを避けたい場合)は、これを行うことです:
double last_key;
bool last_key_has_been_set = false;
これは機能しますが、キーがデフォルトで構築可能である必要があり、キーの不要なコピーが必要になります ( double
.