然后向list之中填充如下8个值,
.NetFramework
Active Setup
File Manager
Windows
CurrentVersion
Policies
Volatile Environment
{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}
再sort一下,
szTitle.sort();
这时,在list之中上面8个值将会以如下顺序排列:
.NetFramework
Active Setup
CurrentVersion
File Manager
Policies
Volatile Environment
Windows
{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}
现在问题是,我想让list之中的8个值按如下顺序排列,该如何做呢?
{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}
.NetFramework
Active Setup
CurrentVersion
File Manager
Policies
Volatile Environment
Windows
6 个解决方案
#1
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = 0;
if(str1_len > str2_len)
size = str2_len;
else
size = str1_len;
for(int i = 0; i < size; i++ )
{
if(str1[i] == '{')
return true;
if(str1[i] > str2[i] || str2[i] == '{')
return false;
}
return true;
}
};
int main(void)
{
list<string> l;
l.push_back(".NetFramework");
l.push_back("Active Setup");
l.push_back("CurrentVersion");
l.push_back("File Manager");
l.push_back("Policies");
l.push_back("Volatile Environment");
l.push_back("Windows");
l.push_back("{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}");
l.sort(my_compare());
copy(l.begin(), l.end(), ostream_iterator<string>(cout, "\n"));
}
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = 0;
if(str1_len > str2_len)
size = str2_len;
else
size = str1_len;
for(int i = 0; i < size; i++ )
{
if(str1[i] == '{')
return true;
if(str1[i] > str2[i] || str2[i] == '{')
return false;
}
return true;
}
};
int main(void)
{
list<string> l;
l.push_back(".NetFramework");
l.push_back("Active Setup");
l.push_back("CurrentVersion");
l.push_back("File Manager");
l.push_back("Policies");
l.push_back("Volatile Environment");
l.push_back("Windows");
l.push_back("{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}");
l.sort(my_compare());
copy(l.begin(), l.end(), ostream_iterator<string>(cout, "\n"));
}
#2
这个要用list::sort排序,并且就算是去掉重复的元素,也应该用list::unique去去除
#3
没看题目就答了……
同意楼上,需要创建自己的函数对象进行比较,否则调用默认的operator<会造成排序结果不正确。
楼上定义了一个my_compare(的提供了operator())的类作为伪函数来提供这个比较。
同意楼上,需要创建自己的函数对象进行比较,否则调用默认的operator<会造成排序结果不正确。
楼上定义了一个my_compare(的提供了operator())的类作为伪函数来提供这个比较。
#4
同意鸡丁.楼上说的正确.
#5
修改版(偷懒版)my_compare……
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
if( ( x[0] != y[0] ) && ( x[0] == '{'))
return true;
if( y[0] == '{' )
return false;
return x<y;
}
};
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
if( ( x[0] != y[0] ) && ( x[0] == '{'))
return true;
if( y[0] == '{' )
return false;
return x<y;
}
};
#6
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = str1_len > str2_len ? str2_len : str1_len;
for(int i = 0; i < size; i++ )
{
if( str1[i] == str2[i] )
continue;
if(str1[i] == '{' && str2[i] >= 'A')
return false;
if(str2[i] == '{' && str1[i] >= 'A')
return true;
return str1[i] < str2[i] ? false : true;
}
return true;
}
};
一般使用版……
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = str1_len > str2_len ? str2_len : str1_len;
for(int i = 0; i < size; i++ )
{
if( str1[i] == str2[i] )
continue;
if(str1[i] == '{' && str2[i] >= 'A')
return false;
if(str2[i] == '{' && str1[i] >= 'A')
return true;
return str1[i] < str2[i] ? false : true;
}
return true;
}
};
一般使用版……
#1
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = 0;
if(str1_len > str2_len)
size = str2_len;
else
size = str1_len;
for(int i = 0; i < size; i++ )
{
if(str1[i] == '{')
return true;
if(str1[i] > str2[i] || str2[i] == '{')
return false;
}
return true;
}
};
int main(void)
{
list<string> l;
l.push_back(".NetFramework");
l.push_back("Active Setup");
l.push_back("CurrentVersion");
l.push_back("File Manager");
l.push_back("Policies");
l.push_back("Volatile Environment");
l.push_back("Windows");
l.push_back("{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}");
l.sort(my_compare());
copy(l.begin(), l.end(), ostream_iterator<string>(cout, "\n"));
}
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = 0;
if(str1_len > str2_len)
size = str2_len;
else
size = str1_len;
for(int i = 0; i < size; i++ )
{
if(str1[i] == '{')
return true;
if(str1[i] > str2[i] || str2[i] == '{')
return false;
}
return true;
}
};
int main(void)
{
list<string> l;
l.push_back(".NetFramework");
l.push_back("Active Setup");
l.push_back("CurrentVersion");
l.push_back("File Manager");
l.push_back("Policies");
l.push_back("Volatile Environment");
l.push_back("Windows");
l.push_back("{6BC0989F-0CE6-11D1-BAAE-00C04FC2E20D}");
l.sort(my_compare());
copy(l.begin(), l.end(), ostream_iterator<string>(cout, "\n"));
}
#2
这个要用list::sort排序,并且就算是去掉重复的元素,也应该用list::unique去去除
#3
没看题目就答了……
同意楼上,需要创建自己的函数对象进行比较,否则调用默认的operator<会造成排序结果不正确。
楼上定义了一个my_compare(的提供了operator())的类作为伪函数来提供这个比较。
同意楼上,需要创建自己的函数对象进行比较,否则调用默认的operator<会造成排序结果不正确。
楼上定义了一个my_compare(的提供了operator())的类作为伪函数来提供这个比较。
#4
同意鸡丁.楼上说的正确.
#5
修改版(偷懒版)my_compare……
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
if( ( x[0] != y[0] ) && ( x[0] == '{'))
return true;
if( y[0] == '{' )
return false;
return x<y;
}
};
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
if( ( x[0] != y[0] ) && ( x[0] == '{'))
return true;
if( y[0] == '{' )
return false;
return x<y;
}
};
#6
class my_compare
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = str1_len > str2_len ? str2_len : str1_len;
for(int i = 0; i < size; i++ )
{
if( str1[i] == str2[i] )
continue;
if(str1[i] == '{' && str2[i] >= 'A')
return false;
if(str2[i] == '{' && str1[i] >= 'A')
return true;
return str1[i] < str2[i] ? false : true;
}
return true;
}
};
一般使用版……
{
public:
bool operator()(const std::string& x, const std::string& y) const
{
const char* str1 = x.c_str();
const char* str2 = y.c_str();
int str1_len = x.length();
int str2_len = y.length();
int size = str1_len > str2_len ? str2_len : str1_len;
for(int i = 0; i < size; i++ )
{
if( str1[i] == str2[i] )
continue;
if(str1[i] == '{' && str2[i] >= 'A')
return false;
if(str2[i] == '{' && str1[i] >= 'A')
return true;
return str1[i] < str2[i] ? false : true;
}
return true;
}
};
一般使用版……