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 传递时,score["Player5Name] 的值将变为 1,但所有其他值将保持 0。在训练结束时,这些值将被排序对于每个球员,根据谁球员的价值更大,主计分系统将被更新。因此,如果球员 5 有 100 次向前传球,并且这个值是最大的,并且没有其他人拥有它,那么这个球员将被分配 10 的值。如果玩家 3、7 和 9 有 90 次传球,排名第二,然后计算为 (9+8+7)/3 等等。Foo 类还有另一个 std::string 成员,它描述了玩家做了什么,因此向量可以通过适当的操作进行排序。
我希望这能澄清我正在努力做得更好的事情。
[/编辑]