#include <map>
    using namespace std;       struct struId
    {
        CString str;
        int     i;
        BOOL operator < (const struId &testSI) const
        {
            return (0 > str.Compare(testSI.str) || i < testSI.i);
        }
    };    std::map<struId, CString> shit;
    
    struId Fuck1 = {"Fuck", 1};
    struId Fuck2 = {"Fuck", 2};
struId Fuck3 = {"shit", 1};
struId Fuck4 = {"shit", 2};

        shit.insert(pair<struId, CString>(Fuck1, "Fuck1"));
shit.insert(pair<struId, CString>(Fuck2, "Fuck2"));
shit.insert(pair<struId, CString>(Fuck3, "Fuck3"));//这一步就错了!
shit.insert(pair<struId, CString>(Fuck4, "Fuck4"));

解决方案 »

  1.   

    我用的vs2005/vc++  "使用多字节字符集"
      

  2.   

    debug Assertion Failed!.....Expression: invalid operator <
    ....
      

  3.   

    return (0 > str.Compare(testSI.str) || i < testSI.i);
    两个条件只要成立一个就返回TRUE,这逻辑就有问题了,当a、b两个元素的str和i成员都不同时,就会造成a<b和b<a同时成立,自己想想吧。
      

  4.   

    可以这样改:
    if (0 < str.Compare(testSI.str)) return FALSE;
    return i < testSI.i;
      

  5.   

    http://hi.baidu.com/cuifenghui/blog/item/742b4eed1484a5d0b21cb1ff.html(四) 如何实现两个Key的map, 只有两个Key都匹配才命中目标可以定义结构MyStruct如下:
      

  6.   

    你的想法可能是这样:
    return (0 > str.Compare(testSI.str) || 0 == str.Compare(testSI.str) && i < testSI.i);
      

  7.   

    网上搜到的信息只能作为参考,自己也要想想是否合理,“两个key必须都匹配才命中”却用“或”关系运算,明显是错的。
      

  8.   

    我不喜欢网上聊天,也没有时间聊,所以没有QQ和MSN。有问题可以发帖问,其他人也可以帮你解决问题。每天发帖和回帖可以加40可用分,不必担心分不够。