Я не вижу, что может быть более элегантным, чем просто разбор, но , пожалуйста, используйте уже имеющиеся стандартные библиотечные средства. Предполагая, что вам не нужна проверка ошибок:
void Parse(int result[4], const std::string& input)
{
std::istringstream parser(input);
parser >> result[0];
for(int idx = 1; idx < 4; idx++)
{
parser.get(); //Skip period
parser >> result[idx];
}
}
bool LessThanVersion(const std::string& a,const std::string& b)
{
int parsedA[4], parsedB[4];
Parse(parsedA, a);
Parse(parsedB, b);
return std::lexicographical_compare(parsedA, parsedA + 4, parsedB, parsedB + 4);
}
Что-либо более сложное будет труднее поддерживать и не стоит вашего времени.