我目前正在研究DNA数据库类,我目前将数据库中的每一行与匹配分数(基于编辑距离)和实际DNA序列本身相关联,在迭代循环中首先以这种方式进行修改是否安全?
typedef std::pair<int, DnaDatabaseRow> DnaPairT;
typedef std::vector<DnaPairT> DnaDatabaseT;
// ....
for(DnaDatabaseT::iterator it = database.begin();
it != database.end(); it++)
{
int score = it->second.query(query);
it->first = score;
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是我可以稍后按分数对它们进行排序.我已经尝试过地图并收到有关首先修改的编译错误,但有没有比这更好的方法来存储所有信息以便以后进行排序?
我在一个定义为的类中有一个私有属性vector<pair<char *, int> > data;.我用这个向量添加数据data.push_back(make_pair(p, r));.后来当我从矢量中获取数据时,我得到了p值的坏数据.返回的数据就像??U3.我认为这是因为存储了一个指向char数组的指针.我将如何在矢量中存储实际副本.如果它有助于char数组永远不会超过255个字符+ 1为null终止.
我今天正在玩一些代码,我想到了在数组中放入一堆对,但我无法让它工作.这是代码:
#include <utility>
#include <iostream>
std::pair<double,double> * pairArr;
int main(){
pairArr = new std::pair<double,double> [3]; //creating the array
pairArr [0] = make_pair(1.0,1.2); //Filling arbitrary numbers
pairArr [1] = make_pair(0.2,1.4);
pairArr [2] = make_pair(0.8,1.3);
std::cout<< pair[0].first << pair[1].second << pair[2].first //Output
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个程序的输出并不是我输入的全部内容.
我在使用sort运算符时遇到了麻烦,因为我只需要对该对中的第一个元素进行排序.代码很简单但不起作用:
运营商的定义如下:
struct sort_pred {
bool operator()(const CromosomaIndex &left, const CromosomaIndex &right) {
return left.first < right.first;
}
};
Run Code Online (Sandbox Code Playgroud)
而且类型是
typedef std::pair<double,int> CromosomaIndex;
Run Code Online (Sandbox Code Playgroud)
我正在尝试像这样排序数组:
CromosomaIndex nuevo[2];
nuevo[0].first = 0.01;
nuevo[0].second = 0;
nuevo[1].first = 0.009;
nuevo[1].second = 1;
int elements = sizeof(nuevo) / sizeof(nuevo[0]);
sort(nuevo, nuevo+ elements, sort_pred());
Run Code Online (Sandbox Code Playgroud)
但问题是这是排序第一个和第二个元素,我只想对第一个元素进行排序并保持第二个元素是固定的.有什么想法吗?
如何创建一组对,其中的元素(对)使用自定义bool函数进行排序?我写
set <pair<int,int>,compare> myset;
Run Code Online (Sandbox Code Playgroud)
并得到错误:参数2处的类型/值不匹配,预期类型,得到"比较"
我把"比较"定义为
bool compare(pair <int,int> g1, pair <int,int> g2)
{
return (g1.second-g1.first > g2.second-g2.first);
}
Run Code Online (Sandbox Code Playgroud)
而且当然
#include <vector>
#include <set>
Run Code Online (Sandbox Code Playgroud) 我试图在向量中找出最小值/最大值 pair<int, std::string>
我的代码:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::vector<std::pair<int, std::string>> pairs;
pairs = {{6,"a"}, {4,"b"}, {5,"c"}, {8,"d"}, {7,"e"}};
int min = 0, max = 0;
//how to find out min/max?
std::cout << "Minimum Number : " << min << '\n';
std::cout << "Maximum Number : " << max << '\n';
}
Run Code Online (Sandbox Code Playgroud)
我想要的结果:
Minimum Value : 4
Maximum Value : 8
Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到我想要的结果?
编辑:
这是我迄今为止的解决方案.
std::sort(pairs.begin(), pairs.end());
min = pairs[0].first;
max …Run Code Online (Sandbox Code Playgroud) 我没有找到回答这个问题的人,以下内容之间是否有区别:
v.push_back({x, y});
Run Code Online (Sandbox Code Playgroud)
和:
v.push_back(make_pair(x, y));
Run Code Online (Sandbox Code Playgroud)
假设v是这样声明的:
vector<pair<int,int> > v;
Run Code Online (Sandbox Code Playgroud) 我正在使用CLion IDE编码我的C ++项目。有时候,IDE会比我更聪明,并给我一些建议。在代码检查过程中(CLion),我遇到一个简单的问题。它说以下代码可以简化,即使我认为这是我能想到的最简单的形式:
代码:
if (node.first >= 0 && node.first <= 45 &&
node.second >= 0 && node.second <= 30)
return true;
else
return false;
Run Code Online (Sandbox Code Playgroud)
假设节点的类型 std::pair<int, int>
我从CLion IDE获得的建议如下:
代码检查注释:
Inspection info: This inspection finds the part of the code that can be simplified, e.g. constant conditions, identical if branches, pointless boolean expressions, etc.
Run Code Online (Sandbox Code Playgroud)
您认为这可以进一步简化吗?
c++ if-statement code-inspection conditional-statements std-pair
int main() {
pair<int, int> res;
// check here pair is empty ?
// res = make_pair(1 , 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在以上代码段中,检查一对是否已初始化的理想方法是什么?
编辑:正如下面的一些答案所指出的,在这里使用单词“未初始化”是错误的,更具体地说,我该如何检查该值是否已显式设置(默认构造函数除外)
所以我有一个类myClass和两个私有变量,假设 i,j 和一个类方法myMethod如下-
std::pair<int, int > myClass::myMethod(void)
{
std::pair<int, int> Pair;
this->i = 100;
this->j = 50;
Pair.first = this->i;
Pair.second = this->j;
return Pair;
}
Run Code Online (Sandbox Code Playgroud)
我从另一个函数调用该方法如下 -
std::pair<int, int> receivedPair = myClass.myMethod();
Run Code Online (Sandbox Code Playgroud)
所以如果我编辑receivedPair让我们说
receivedPair.first = 200;
Run Code Online (Sandbox Code Playgroud)
Class 变量i也会变成等于 200 吗?我基本上需要通过引用串联的几个函数来传递变量,以便更新相同的内存位置...... TIA