我试图按字母顺序插入此Vector(mCards)。我不能使用排序 - 它必须按字母顺序插入!现在......我正在反向插入。我无法弄清楚如何按正确的字母顺序插入!谁能帮我? 谢谢!
void Rolodex::Add(Card& card)
{
vector<Card>::iterator temp;
if (mCards.size() != 0)
{
for(vector<Card>::iterator it = mCards.begin(); it != mCards.end(); ++it)
{
Card& currentCard = *it;
temp = it;
int compareResult = currentCard.GetLastName().compare(card.GetLastName());
if (compareResult <= 0)
{
mIteratorNumber = it - mCards.begin();
mCards.insert(temp, card);
return;
}
}
}
else
{
mCards.push_back(card);
for(vector<Card>::iterator it = mCards.begin(); it != mCards.end(); ++it)
{
mIteratorNumber = it - mCards.begin();
}
}
}
答案 0 :(得分:0)
如果您想要一个已排序的容器,如果您可能有重复的值,则可以改为查看std::map
和std::set
或其多变量。
要插入已排序的向量,正确的方法是使用std::upper_bound
myCards.insert( std::upper_bound( begin(myCards), end(myCards), card), card );
如果该卡没有有效的operator<
,请使用这样的谓词
auto it = std::upper_bound( begin(myCards), end(myCards), card,
[] ( Card const & a, Card const & b ) {
return a.GetLastName().compare(b.GetLastName()) < 0;
} );
myCards.insert( it, card );