字符串的最小字典值

Mr *_* M. 5 c++ string c++11

将字符串与operator <进行比较时,最小的字符串是什么?

更具体地说,什么是比任何其他字符串更小(使用<)的字符串?

T.C*_*.C. 9

空字符串是所有字符串中的"最小"字符串 - 也就是说,它比任何非空字符串都要小.

§21.4.8.4[string :: op <]:

template<class charT, class traits, class Allocator>
bool operator< (const basic_string<charT,traits,Allocator>& lhs,
                const basic_string<charT,traits,Allocator>& rhs) noexcept;
Run Code Online (Sandbox Code Playgroud)

1 返回:lhs.compare(rhs) < 0.

§21.4.7.9[string :: compare]:

int compare(const basic_string& str) const noexcept;
Run Code Online (Sandbox Code Playgroud)

1种效果:确定有效长度rlen的字符串的比较作为最小的size()str.size().然后该函数通过调用比较两个字符串traits::compare(data(), str.data(), rlen).

2 返回:如果比较结果非零,则返回非零结果.否则,返回表72中指示的值.

表72 - compare()结果

 Condition               Return Value
 size() < str.size()     < 0
 size() == str.size()    0
 size() > str.size()     > 0
Run Code Online (Sandbox Code Playgroud)

对于空字符串e和非空字符串之间的任何比较ne,rlen为零,在这种情况下traits::compare()指定返回零*.因此,e.compare(ne)每个表72 的结果总是小于零,并且e < ne始终为真.


* 如果"对于[0,n)中的每个i 为真" ,则指定字符特征compare()函数返回零X::eq(p[i],q[i])(§21.2.1[char.traits.require],表62); 当时n == 0,范围是空的,条件是空的.