[14CVPR]BING Obejectness->ValStructVec文件

作用:主要用作数据操作。

//模板类
template<typename VT, typename ST> 
struct ValStructVec
{
	//clear 
	ValStructVec(){clear();}
	inline int size() const {return sz;} 
	inline void clear() {sz = 0; structVals.clear(); valIdxes.clear();}
	inline void reserve(int resSz){clear(); structVals.reserve(resSz); valIdxes.reserve(resSz); }
	//压入数据
	inline void pushBack(const VT& val, const ST& structVal) {valIdxes.push_back(make_pair(val, sz)); structVals.push_back(structVal); sz++;}

	inline const VT& operator ()(int i) const {return valIdxes[i].first;} // Should be called after sort
	inline const ST& operator [](int i) const {return structVals[valIdxes[i].second];} // Should be called after sort
	
	inline VT& operator ()(int i) {return valIdxes[i].first;} // Should be called after sort
	inline ST& operator [](int i) {return structVals[valIdxes[i].second];} // Should be called after sort

	void sort(bool descendOrder = true);
	const vector<ST> &getSortedStructVal();
	void append(const ValStructVec<VT, ST> &newVals, int startV = 0);

	vector<ST> structVals; // struct values

private:
	int sz; // size of the value struct vector
	vector<pair<VT, int>> valIdxes; // Indexes after sort
	bool smaller() {return true;};
	vector<ST> sortedStructVals; 
};

template<typename VT, typename ST> 
void ValStructVec<VT, ST>::append(const ValStructVec<VT, ST> &newVals, int startV)
{
	int sz = newVals.size();
	for (int i = 0; i < sz; i++)
		pushBack((float)((i+300)*startV)/*newVals(i)*/, newVals[i]);
}

template<typename VT, typename ST> 
void ValStructVec<VT, ST>::sort(bool descendOrder /* = true */)
{
	if (descendOrder)
		std::sort(valIdxes.begin(), valIdxes.end(), std::greater<pair<VT, int>>());
	else
		std::sort(valIdxes.begin(), valIdxes.end(), std::less<pair<VT, int>>());
}

template<typename VT, typename ST> 
const vector<ST>& ValStructVec<VT, ST>::getSortedStructVal()
{
	sortedStructVals.resize(sz);
	for (int i = 0; i < sz; i++)
		sortedStructVals[i] = structVals[valIdxes[i].second];
	return sortedStructVals;
}
函数调用:

int main()
{
	ValStructVec<int, string> sVals;
	sVals.pushBack(3, "String 3");
	sVals.pushBack(5, "String 5");
	sVals.pushBack(4, "String 4");
	sVals.pushBack(1, "String 1");
	sVals.sort(false);
	for (int i = 0; i < sVals.size(); i++)
	{
		//printf("%d, %s\n", sVals(i), sVals[i]);
		cout<<"  "<<sVals(i)<<"  "<<sVals[i]<<endl;
	}
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值