Sort a list of object identifiers: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 54:
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |</pre>
 
=={{header|C++}}==
<lang Cpp>#include <string>
#include <vector>
#include <algorithm>
#include <boost/tokenizer.hpp>
#include <iostream>
 
std::vector<std::string> splitOnChar ( std::string & s , const char c ) {
typedef boost::tokenizer<boost::char_separator<char>> tokenizer ;
std::vector<std::string> parts ;
boost::char_separator<char> sep( &c ) ;
tokenizer tokens( s , sep ) ;
for ( auto it = tokens.begin( ) ; it != tokens.end( ) ; it++ )
parts.push_back( *it ) ;
return parts ;
}
 
bool myCompare ( const std::string & s1 , const std::string & s2 ) {
std::string firstcopy( s1 ) ;
std::string secondcopy ( s2 ) ;
std::vector<std::string> firstparts( splitOnChar ( firstcopy, '.' ) ) ;
std::vector<std::string> secondparts( splitOnChar ( secondcopy, '.' ) ) ;
std::vector<int> numbers1( firstparts.size( ) ) ;
std::vector<int> numbers2( secondparts.size( ) ) ;
std::transform( firstparts.begin( ) , firstparts.end( ) , numbers1.begin( ) ,
[]( std::string st ) { return std::stoi( st , nullptr ) ; } ) ;
std::transform( secondparts.begin( ) , secondparts.end( ) , numbers2.begin( ) ,
[]( std::string st ) { return std::stoi( st , nullptr ) ; } ) ;
auto it1 = numbers1.begin( ) ;
auto it2 = numbers2.begin( ) ;
while ( *it1 == *it2 ) {
it1++ ;
it2++ ;
}
return *it1 < *it2 ;
}
 
int main( ) {
std::vector<std::string> arrayOID { ".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
".1.3.6.1.4.1.11150.3.4.0.2",
".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
".1.3.6.1.4.1.11150.3.4.0.1",
".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
".1.3.6.1.4.1.11150.3.4.0.11",
".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
".1.3.6.1.4.1.11.2.17.3773.0.2",
".1.3.6.1.4.1.11.2.17.19.2.0.79",
".1.3.6.1.4.1.11150.3.4.0.21",
".1.3.6.1.4.1.11.2.17.19.2.0.9",
".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
".1.3.6.1.4.1.11.2.17.3773.0.1" } ;
std::sort( arrayOID.begin( ) , arrayOID.end( ) , myCompare ) ;
int number = 1 ;
for ( std::string s : arrayOID ) {
std::cout << "# " ;
if ( number < 10 )
std::cout << 0 << number ;
else
std::cout << number ;
std::cout << " | " << s << " |\n" ;
number++ ;
}
return 0 ;
}</lang>
{{out}}
<pre># 01 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
# 02 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
# 03 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
# 04 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
# 05 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
# 06 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
# 07 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
# 08 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
# 09 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
# 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
# 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
# 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
# 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
# 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
# 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
# 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
</pre>
 
 
 
258

edits