NULL値がある場合は、この情報をカプセル化できる型が必要です。
ここで、メモは無効または有効(値付き)です。
class Node
{
bool valid;
int value;
public:
Node(int v): valid(true), value(v) {}
Node(): valid(false) {}
bool isValid() const {return valid;}
Node& operator=(int newValue)
{
valid = true;
value = newValue;
return *this;
}
void makeInvalid()
{
valid = false;
}
bool operator<(Node const& rhs) const
{
// If both are invalid then neither is less.
// If one is invalid the invalid one is less
// Otherwise use the value to sort by
if (!valid && !rhs.value) { return false;}
if (valid && !rhs.valid) { return false;}
if (!valid && rhs.valid) { return true;}
return value < rhs.valid;
}
friend std::ostream& operator<<(std::ostream& stream, Node const& value)
{
if (value.isValid())
{ stream << value.value;
}
else
{ stream << "-- NULL --";
}
return stream;
}
};
その後あなたがこの使用することができます。
#include <algorithm>
#include <vector>
#include <iterator>
#include <iostream>
int main()
{
std::vector<Node> data;
data.push_back(1);
data.push_back(2);
data.push_back(Node()); // Invalid or NULL value.
std::sort(data.begin(), data.end());
std::copy(data.begin(), data.end(),
std::ostream_iterator<Node>(std::cout, " ")
);
}
は、その後、あなたが得るランニング:
> g++ sort.cpp
> ./a.out
-- NULL -- 1 2
array' 'の種類は何ですが? – Cameron
ソートする値を持つ配列です。 – droidmachine
正確な型はC++では重要です。配列の宣言をあなたに追加してください。 –