BartoszKP 的带有 STL 集的解决方案可能是最好的简单解决方案。
如果你真的很热衷,你可以用这样的东西来模拟一个穷人的哈希:
const unsigned nIdle('ELDI'); // "IDLE" with byte order reversed
const unsigned nStarted('RATS'); // "STAR" with byte order reversed
const unsigned nStopped('POTS'); // "STOP" with byte order reversed
const unsigned nPaused('SUAP'); // "PAUS" with byte order reversed
bool Verify(const char *szState)
{
unsigned nState = *reinterpret_cast<const unsigned *>(szState);
switch (nState)
{
case nIdle:
case nStarted:
case nStopped:
case nPaused:
return true;
default:
return false;
}
}
int main()
{
const std::string s[] = {"IDLE", "STARTED", "STOPPED", "PAUSED", "INVALID"};
for (auto itr=std::begin(s); itr!=std::end(s); ++itr)
{
std::cout << *itr << '\t';
if (Verify(itr->c_str()))
std::cout << "OK";
else
std::cout << "Fail";
std::cout << std::endl;
}
return 0;
}
您需要确定您的数据。任何短于 sizeof(unsigned) 的字符串都可能存在风险,您需要确保该字符串的前 4 个字节是唯一的。例如,“STOPPED”和“STOPPING”对于 4 个字节是相同的。
你可以做一个适当的哈希,但这可能不会比比较字符串快。