[英]Insert into a vector in alphabetical order
我试图按字母顺序插入此Vector(mCards)。 我不能使用sort-必须按字母顺序插入! 现在...我要反向插入。 我不知道如何使它以正确的字母顺序插入! 谁能帮我? 谢谢!
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();
}
}
}
如果要排序的容器,则可以查看std::map
和std::set
或它们的multi变量(如果您有重复的值)。
要插入排序的向量中,正确的方法是使用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 );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.