Lit*_*ith 4 c++ sorting algorithm stdvector c++11
我有一个名为Sheep的结构数组(A [#])(因为我的任务是关于绵羊DNR).在我做任何要求的任务后,我留下了这个结构:
struct Sheep
{
string Vardas;
char Fragmentas[CMax];
int atitikme = 0;
};
Run Code Online (Sandbox Code Playgroud)
在我的内部,数据是:
(string Vardas) | (char Fragmentas[CMax]) | (int atitikme)
Baltukas TAGCTT 3
Bailioji ATGCAA 3
Smarkuolis AATGAA 1
Run Code Online (Sandbox Code Playgroud)
(char Fragmentas [CMax]将不会使用,所以你不必看它,我只是将它命名为明确).
所有这些数据都来自U2.txt文件,无法在代码中手动输入.
它剩下要做的就是按照这些规则对它进行排序:
- 它通过'int atitikme'从大到小.
- 如果'int atitikme'相等,那么它必须按'A [#]排序.Vardas按字母顺序排列.
要通过'int atitikme'对其进行排序,我创建了一个代码:
string q;
char w[20];
int e;
for (int o = 0; o < n-1; o++)
{
for (int p = o+1; p < n-1; p++)
{
if (A[p].atitikme > A[o].atitikme)
{
// - Vardo Keitimas
q = A[o].Vardas;
A[o].Vardas = A[p].Vardas;
A[p].Vardas = q;
// - A[#].atitikme keitimas
e = A[o].atitikme;
A[o].atitikme = A[p].atitikme;
A[p].atitikme = e;
// - DNR farkmentu keitimas
for (int r = 0; r < m; r++)
{
w[r] = A[o].Fragmentas[r];
A[o].Fragmentas[r] = A[p].Fragmentas[r];
A[p].Fragmentas[r] = w[r];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
n = 4 | m = 6
如何/我需要添加到此代码中以使其成为现实:
else if (A[p].atitikme == A[o].atitikme)
{
<code>
}
Run Code Online (Sandbox Code Playgroud)
如果'atitikme'= =另一个'atitikme'那么A [p] .Vardas和A [o] .Vardas必须按字母顺序排序.但只有整个阵列中的那两个.
或者,如果它太难理解我的意思,任何人都可以在答案框中发布代码,是否会在2个字符串之间按字母顺序排序?
注意:整行数据
(字符串Vardas)(char Fragmentas [CMax])(int atitikme)
必须保持不变,只有行中的地方必须是不同的,并按我之前提到的那些规则排序.
输出应该是:
Bailioji 3
Baltukas 3
Smarkuolis 1
Run Code Online (Sandbox Code Playgroud)
编辑:我目前的输出是:
Baltukas 3
Bailioji 3
Smarkuolis 1
Run Code Online (Sandbox Code Playgroud)
Ps.该任务允许使用所有内容,只要它的C++,而不必创建或读取任何其他文件.
在这里,我用std::vector<>而不是数组来存储羊.其次,使用std::sort()和lambda函数,您可以轻松提到如何对std::vector<>/中的元素进行排序Sheeps.这将是最简单的方法.
以下是实时代码,以供审核:https://www.ideone.com/ay7TWU
#include <iostream>
#include <vector>
#include <algorithm>
struct Sheep
{
std::string Vardas;
std::vector<char> Fragmentas;
int atitikme;
};
int main()
{
std::vector<Sheep> vec =
{
{"Baltukas", {'T','A','G','C','T','T'}, 3},
{"Bailioji", {'A','T','G','C','A','A'}, 3},
{"Smarkuolis",{'A','A','T','G','A','A'}, 1},
{"Hmarkuolis",{'A','A','T','G','A','A'}, 1},
{"Kmarkuolis",{'A','A','T','G','A','A'}, 2}
};
std::sort(vec.begin(), vec.end(), [](const Sheep& lhs, const Sheep& rhs)
{
return (lhs.atitikme == rhs.atitikme) ?
lhs.Vardas < rhs.Vardas: // if atitikme's of sheeps are equal
lhs.atitikme > rhs.atitikme; // if atitikme's of sheeps are not equal
});
for (const auto& it: vec)
std::cout << it.Vardas << " " << it.atitikme << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Bailioji 3
Baltukas 3
Kmarkuolis 2
Hmarkuolis 1
Smarkuolis 1
Run Code Online (Sandbox Code Playgroud)