gpt4 book ai didi

c++ - 此示例中使用的运算符 "<"在哪里?

转载 作者:太空狗 更新时间:2023-10-29 23:40:31 26 4
gpt4 key购买 nike

我尝试了使用“ map ”的 STL 示例程序。

http://ideone.com/LB8xvh

#include <iostream>
#include <map>
#include <cstring>
using namespace std;

class ItemName
{
char name[80];
public:
ItemName(char *s) { strcpy(name, s); }
char *get() { return name; }
};

bool operator<(ItemName a, ItemName b)
{
return strcmp(a.get(), b.get()) < 0;
}

class ItemObj
{
char str[80];
public:
ItemObj(char *s) { strcpy(str, s); }
char *get() { return str; }
};

char itemdata[][80] = {
"potion", "heal HP",
"key", "unlock a door",
"lamp", "light",
};


int main() {
map<ItemName, ItemObj> items;

for(int i=0; i<3; i++) {
items.insert(
pair<ItemName, ItemObj>(
ItemName(itemdata[i*2]),
ItemObj(itemdata[i*2+1]))); // ***** pair *****

}

map<ItemName, ItemObj>::iterator p;

char str[80];
const int kMaxLoop = 5;
int nLoop = 0;
while(nLoop < kMaxLoop) {
cout << "> ";
cin >> str;
p = items.find(str);
if(p != items.end() ) {
cout << p->second.get() << endl;
} else {
cout << "unknown item." << endl;
}
nLoop++;
}

return 0;
}

在这个例子中,我不太确定在哪里使用了运算符“<”。如果我注释掉运算符“<”的定义,我会收到很多错误。

最佳答案

std::map有一个参数来指定如何比较 map 中的元素(需要,因为 map 始终维护其内容按键排序)。默认情况下,这是 std::less<T> .

std::less<T> ,反过来,将使用 operator< 进行比较.

可以创建项目 map operator<未定义,但要执行此操作,您需要明确指定比较函数/仿函数。

也就是说:你的 ItemDataItemObj两者实际上都在做 std::string 的事情已经可以了。您可以将上面的大部分代码简化为如下所示:

std::map<std::string, std::string> items{
{ "potion", "heal HP" },
{ "key", "unlock a door" },
{ "lamp", "light" }
};

关于c++ - 此示例中使用的运算符 "<"在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19236871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com