之前沒有使用set_intersection,但我相信它可以與地圖一起使用。我寫了下面的示例代碼,但它並沒有給我什麼,我期望:使用帶有set_intersection的地圖
#include <map>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
struct Money
{
double amount;
string currency;
bool operator< (const Money& rhs) const
{
if (amount != rhs.amount)
return (amount < rhs.amount);
return (currency < rhs.currency);
}
};
int main(int argc, char* argv[])
{
Money mn[] =
{
{ 2.32, "USD" },
{ 2.76, "USD" },
{ 4.30, "GBP" },
{ 1.21, "GBP" },
{ 1.37, "GBP" },
{ 6.74, "GBP" },
{ 2.55, "EUR" }
};
typedef pair< int, Money > MoneyPair;
typedef map< int, Money > MoneyMap;
MoneyMap map1;
map1.insert(MoneyPair(1, mn[0]));
map1.insert(MoneyPair(2, mn[1]));
map1.insert(MoneyPair(3, mn[2])); // (3)
map1.insert(MoneyPair(4, mn[3])); // (4)
MoneyMap map2;
map2.insert(MoneyPair(3, mn[2])); // (3)
map2.insert(MoneyPair(4, mn[3])); // (4)
map2.insert(MoneyPair(5, mn[4]));
map2.insert(MoneyPair(6, mn[5]));
map2.insert(MoneyPair(7, mn[6]));
MoneyMap out;
MoneyMap::iterator out_itr(out.begin());
set_intersection(map1.begin(), map1.end(), map2.begin(), map2.end(), inserter(out, out_itr));
cout << "intersection has " << out.size() << " elements." << endl;
return 0;
}
由於標記(3)和(4)同時出現在地圖中的一對,我期待,我會得到2種元素在路口,但沒有,我得到:
intersection has 0 elements.
我敢肯定,這是值得做的地圖/對的比較器,但不能弄明白。
謝謝,你是對的,我糾正了代碼。我從客戶端的原始代碼中重新輸入了這個信息。客戶對發佈代碼有嚴格的規定,所以我不得不重新輸入並且沒有發現錯誤。 – 2010-04-15 05:50:55