|
|
1
8
如果你不想把它们包起来
|
|
|
2
3
“优化方式”如果我们忽略了“过早优化是万恶之源”,标准的方法是添加一个比较器,这很容易编写:
要与以下内容一起使用:
标准方式使用:
即使将静态const char*放入其中,它也会工作(因为std::string与const char*不同,它的内容是可比较的)。 当然,如果需要提取数据,则必须通过std::string.c_str()提取数据。另一方面,由于它是一个集合,我猜您只想知道“AAA”是否在集合中,而不是提取“AAA”的值“AAA”。 注意:我确实读过关于“请不要建议创建std::strings”的文章,但随后,您询问了“标准”方式。。。 “永远不要做”的方式
这有点C的味道(使用了不推荐使用的“static”关键字,可能用于std::string bashing的过早优化,以及通过地址进行字符串比较)。 无论如何 您不想通过字符串的地址来比较它们。
当然,如果只使用相同的全局变量来包含字符串,则情况就不同了。 在这种情况下,我建议:
当然,这对我来说是行不通的 静态常量字符* 但这是另一个故事。 |
|
|
3
3
只需继续使用默认顺序,即更少<>。该标准保证less即使对指向不同对象的指针也有效: “对于模板大、小、大、小,任何 指针类型产生总顺序,即使内置运算符<><=>=不要。”
|
|
|
4
0
|
|
|
5
0
这个集合必须包含
立即浮现在脑海中的是将字符串存储在
|
|
|
6
0
可以使用比较器,也可以使用要包含在集合中的包装器类型。(注:
|
|
|
7
0
其他人已经发布了大量的解决方案,展示了如何与
如果
这取决于指针指向什么。如果所有密钥都是从同一数组分配的,则使用
包含单独静态字符串的数组示例:
如果您的编译器/链接器支持并启用了字符串池,则重复的字符串文本应该具有相同的地址,但是否保证在所有情况下都具有相同的地址?依靠链接器优化获得正确的功能是否安全? 也许 可以基于字符串第一次使用的顺序,但如果将另一个翻译单元更改为使用相同的字符串文字之一,则集合顺序可能会更改。
指向
|
|
|
8
-1
由于性能原因,您可能不想使用std::string。 我在运行MSVC和gcc,他们似乎都不介意:
编辑:但是,本例中的行为未指定。请参阅评论。。。
他们也不会抱怨
如果您使用的编译器确实有问题,我可能会继续使用您建议的将指针强制转换为的函子
编辑: 嘿,我被否决了。。。尽管是这里少数几个最直接回答他的问题的人之一。我不熟悉堆栈溢出,如果发生这种情况,有什么办法保护自己吗?话虽如此,我将尝试在这里:
但是,将指针存储在集合中不会产生字符串复制(只是复制指针),并且每次比较都是地址上的简单整数比较,而不是字符串比较。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |