按字母顺序插入矢量

时间:2014-03-29 19:33:20

标签: c++ vector insert

我试图按字母顺序插入此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();  
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您想要一个已排序的容器,如果您可能有重复的值,则可以改为查看std::mapstd::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 );