题记:使用容器时,经常会使用其进行排序查找和删除,简单的sort, find, erase/remove不用多说了,关键是使用谓词时的使用比较麻烦,这里仅仅列举了个例子进行保留,以备以后可以直接拿来使用。
样例代码: COPY后编译可以直接运行(使用Visual Studio 2008 编译通过)。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <string>
struct KeyValue
{
std::string m_strKey;
int m_nValue;
KeyValue() : m_strKey(""), m_nValue(0) {}
KeyValue(std::string strKey, int nValue) : m_strKey(strKey), m_nValue(nValue) {}
bool EqualKey(std::string strKey)
{
return m_strKey.find(strKey) != -1 ? true : false;
}
};
bool CompareKeyValueGreaterValue(KeyValue val1, KeyValue val2)
{
return val1.m_nValue > val2.m_nValue;
}
typedef std::vector<KeyValue> KeyValueCollection;
void ShowAll(const KeyValueCollection& coll)
{
std::cout << " --- begin --- " << std::endl;
for ( KeyValueCollection::const_iterator it = coll.begin();
it != coll.end(); ++it )
{
std::cout << "Key : " << it->m_strKey
<< ", Value : " << it->m_nValue
<< std::endl;
}
std::cout << " --- end --- " << std::endl;
}
int main()
{
KeyValueCollection myColl;
myColl.push_back(KeyValue("Jim", 558));
myColl.push_back(KeyValue("Tim", 665));
myColl.push_back(KeyValue("John", 594));
myColl.push_back(KeyValue("Lance", 625));
myColl.push_back(KeyValue("Thoms", 563));
myColl.push_back(KeyValue("KaKa", 668));
myColl.push_back(KeyValue("Messi", 680));
ShowAll(myColl);
//
// Sort
//
std::sort(myColl.begin(), myColl.end(), CompareKeyValueGreaterValue);
ShowAll(myColl);
//
// find_if
//
if ( std::find_if(myColl.begin(), myColl.end(),
std::bind2nd(std::mem_fun_ref(&KeyValue::EqualKey), std::string("John")))
!= myColl.end() )
{
std::cout << "Have found the value." << std::endl;
}
else
{
std::cout << "Not found the value." << std::endl;
}
//
// remove_if
// remove_if should erase the element from the return iterator to end.
//
KeyValueCollection::iterator pos = std::remove_if(myColl.begin(), myColl.end(),
std::bind2nd(std::mem_fun_ref(&KeyValue::EqualKey), "im"));
myColl.erase(pos, myColl.end());
ShowAll(myColl);
#ifdef _DEBUG
getchar();
#endif
return 0;
}
后记: 例子比较简单,仅供观赏之用。