std::sort
に基づいてソートを行いoperator<
ます。
次に、このクラスを考えてみましょう:
class Foo
{
private:
int m_x;
public:
Foo()
{
m_x = 0;
};
Foo(int a)
{
m_x = a;
}
bool operator<(const Foo &right) const
{
return m_x < right.m_x;
};
void Set( int a ) { m_x = a; };
int Get() { return m_x; };
};
std::vector<Foo> myVec;
for( int i = 0; i < 10; i++ )
myVec.push_back( Foo() );
myVec.at( 5 ).Set( 2 );
myVec.at( 2 ).Set( 3 );
std::sort( myVec.begin(), myVec.end() );
- 要素は、結果の並べ替えベクトルでどのように配置されますか?
私はこのようなことをする必要があります:
int counter = 0; for( int i = 0; i < myVec.size(); i++ ) { if( myVec.at( i++ ).Get() == myVec.at( i ) ) { counter++; continue; } else { // assign some variable some value } // perform some calculation (I have multiple elements with the same value) }
この場合、イテレータを使用する可能性はありますか? それを行うためのより良いアルゴリズムはありますか?
[編集]
これが私がやろうとしていることです。私がサッカーチームを持っているとしましょう。10人のプレイヤーがいます。すべてのプレーヤーには、トレーニング中または試合中に考慮できる技術的/戦術的価値がたくさんあります。したがって、これはすべて次のように保存されます。
std::map<std::string,std::vector<Foo>> score;
ゲームが開始された当初、これらの値はすべて 0 です。ここで、プレーヤー 5 がスコアを転送すると、スコア ["Player5Name] の値は 1 になりますが、他のすべての値は 0 のままです。トレーニングの最後に、これらの値はソートされます。プレイヤー 5 が 100 パス フォワードを持っていて、この値が最大で、他の誰もそれを持っていない場合、このプレイヤーには 10 の値が割り当てられます。プレーヤー 3、7、および 9 は 90 パスを持っており、2 位であり、計算は (9+8+7)/3 などです. Foo クラスには別の std::string メンバーがあり、ベクトルが適切なアクションでソートできます。
これにより、私が何を改善しようとしているのかが明確になることを願っています。
[/編集]