亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unique_tree.inl

?? C++ STL 中沒有樹形容器是最大的遺憾! 還好高手總是能及時出現
?? INL
?? 第 1 頁 / 共 2 頁
字號:
		} else {
			it = oit.node()->insert(value); // child not an orphan.  insert child in parent orphan
			oit.node()->ordered_children.clear();
		}

		if ( it == oit.node()->end() ) // was child inserted as orphan?
			return associative_tree_type::end();  // no.  return proper end()
	} else {
		return associative_tree_type::end(); // couldn't find parent, and orphans not allowed
	}

	return it;
}


// find_deep(const stored_type&)
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
typename tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::child_iterator 
tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::find_deep(const stored_type& value) 
{
	tree_type tree_node(value);  // create seach node
	const typename std::set<tree_type*, deref_key_compare>::iterator desc_it = descendents.find(&tree_node);
	if (desc_it == descendents.end()) // node found in descendants?
		return associative_tree_type::end();  // no.  node not a descendant of this node

	// node is some type of descendant.  check if it's an immediate child
	typename associative_tree_type::iterator it = associative_tree_type::find(value);
	if ( it != associative_tree_type::end() )
		return it;

	// node not an immediate child.  
	it = associative_tree_type::begin();
	const typename associative_tree_type::iterator it_end = associative_tree_type::end();
	for ( ; it != it_end; ++it ) {  // iterate over children and call this fcn recursively
		const typename associative_tree_type::iterator grandchild_it = it.node()->find_deep(value);
		if ( grandchild_it != it.node()->end() ) 
			return grandchild_it;  // found it
	}

	return associative_tree_type::end();
}

// find_deep(const stored_type&) const
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
typename tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::const_child_iterator 
tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::find_deep(const stored_type& value) const
{
	typename associative_tree_type::const_iterator it_end = associative_tree_type::end();
	tree_type tree_node(value);  // create seach node
	typename std::set<tree_type*, deref_key_compare>::const_iterator desc_it = descendents.find(&tree_node);
	if (desc_it == descendents.end())  // node found in descendants?
		return it_end;  // no.  node not a descendant of this node

	// node is some type of descendant.  check if it's an immediate child
	typename associative_tree_type::const_iterator it = associative_tree_type::find(value);
	if ( it != it_end )
		return it;

	// node not an immediate child.  
	it = associative_tree_type::begin();
	for ( ; it != it_end; ++it ) { // iterate over children and call this fcn recursively
		typename associative_tree_type::const_iterator grandchild_it = it.node()->find_deep(value);
		typename associative_tree_type::const_iterator grandchild_it_end = it.node()->end();
		if ( grandchild_it != grandchild_it_end )
			return grandchild_it;  // found it
	}

	return it_end;
}


// clear()
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
void tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::clear()
{
	// create descendant remove set
	std::set<tree_type*, deref_key_compare> remove_set;
	remove_set.swap(descendents);  // get a copy of the descendants, and clear them

	tree_type* pParent = basic_tree_type::parent();
	while ( pParent != 0 ) {  // climb up to the root node
		std::set<tree_type*, deref_key_compare> dest_set;  // create a difference set
		std::set_difference( pParent->descendents.begin(), pParent->descendents.end(),
			remove_set.begin(), remove_set.end(), std::inserter(dest_set, dest_set.begin()), deref_key_compare() );
		pParent->descendents.swap(dest_set);  // and remove the deleted descendants
		pParent = pParent->parent();
	}

	associative_tree_type::clear(); // call base class operation
	ordered_children.clear();
	descendents.clear();

	if ( pOrphans ) { // if this is the root, clear orphans also
		pOrphans->clear();
	}
}


// inform_grandparents(tree_type*, tree_type*)
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
void tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::inform_grandparents( tree_type* new_child, tree_type* pParent  )
{
	if ( pParent) {  // traverse to root, adding new child to descendants to every node
		pParent->descendents.insert(new_child);
		inform_grandparents(new_child, pParent->parent());
	}
}

// find_ordered(const stored_type&)  
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
typename tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::ordered_iterator 
tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::find_ordered(const stored_type& value) 
{
	tree_type tree_node(value);  // search node
	return ordered_iterator(ordered_children.find(&tree_node));
}

// find_ordered(const stored_type&) const 
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
typename tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::const_ordered_iterator 
tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::find_ordered(const stored_type& value) const
{
	tree_type tree_node(value);  // search node
	return const_ordered_iterator(ordered_children.find(&tree_node));
}

// erase(const stored_type&)
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
bool tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::
erase(const stored_type& value)
{
	const typename associative_tree_type::iterator it = find_deep(value);  // see if node is a descendant
	if ( it != associative_tree_type::end() ) {
		tree_type* const pParent = it.node()->parent();  // it is.  get it's parent
		tree_type* pAncestor = pParent;

		while ( pAncestor ) {  // update all ancestors of removed child
			pAncestor->descendents.erase(it.node());
			pAncestor = pAncestor->parent();
		}

		tree_type* const pNode = it.node();
		pParent->ordered_children.erase(pNode);
		dynamic_cast<associative_tree_type*>(pParent)->erase(*pNode->get()); // erase node

		return true;
	}

	return false;
}

// erase(iterator)
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
void tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::erase(typename associative_tree<stored_type, unique_tree<stored_type, node_compare_type, node_order_compare_type>,  std::set<unique_tree<stored_type, node_compare_type, node_order_compare_type>*, unique_tree_deref_less<stored_type, node_compare_type, node_order_compare_type> > >::iterator it) 
{
	tree_type* pAncestor = this;

	while (pAncestor) { // update all ancestors of removed child
		pAncestor->descendents.erase(it.node());
		pAncestor = pAncestor->parent();
	}

	tree_type* pNode = it.node();
	ordered_children.erase(pNode);

	associative_tree_type::erase(*pNode->get()); 
}

// erase(iterator, iterator)
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
void tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::erase(typename associative_tree<stored_type, unique_tree<stored_type, node_compare_type, node_order_compare_type>,  std::set<unique_tree<stored_type, node_compare_type, node_order_compare_type>*, unique_tree_deref_less<stored_type, node_compare_type, node_order_compare_type> > >::iterator it_beg, typename associative_tree<stored_type, unique_tree<stored_type, node_compare_type, node_order_compare_type>,  std::set<unique_tree<stored_type, node_compare_type, node_order_compare_type>*, unique_tree_deref_less<stored_type, node_compare_type, node_order_compare_type> > >::iterator it_end) 
{
	while (it_beg != it_end) {
		erase(it_beg++);
	}
}

// check_for_duplicate()
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
bool tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::check_for_duplicate(const stored_type& value, const tree_type* pParent) const
{
	while ( pParent && !pParent->is_root() ) {  // find root node
		pParent = pParent->parent();
	}

	// check if node is root
	if (!(value < *pParent->get()) && !(*pParent->get() < value))
		return true;

	typename associative_tree_type::const_iterator it = pParent->find_deep(value);  // check if node is descendant of root
	typename associative_tree_type::const_iterator it_end = pParent->end();

	return ( it != it_end );  
}

// get_root()
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
const tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>*
tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::get_root() const
{
	const tree_type* pParent = this;

	while ( pParent->parent() ) {  // traverse up to root
		pParent = pParent->parent();
	}

	return pParent;
}

// swap
template<typename stored_type, typename node_compare_type, typename node_order_compare_type>
void tcl::unique_tree<stored_type, node_compare_type, node_order_compare_type>::swap(tree_type& rhs)
{
	tree_type temp(*this);

	clear();
	*this = rhs;

	rhs.clear();
	rhs = temp;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产美国国产综合一区二区| 久久久久成人黄色影片| 欧美日韩一区在线| www.亚洲精品| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲综合图片区| 亚洲一区视频在线| 亚洲免费成人av| 亚洲国产精品久久艾草纯爱| 亚洲女与黑人做爰| 亚洲一区在线看| 丝袜美腿一区二区三区| 亚洲成人自拍偷拍| 蜜桃视频免费观看一区| 国产一区日韩二区欧美三区| 国产一区二区精品久久91| 成人免费av资源| 色婷婷久久久久swag精品 | 91丨九色丨蝌蚪富婆spa| 97se亚洲国产综合在线| 日韩欧美色综合网站| 久久免费精品国产久精品久久久久| 欧美大片拔萝卜| 国产肉丝袜一区二区| 亚洲免费高清视频在线| 日韩精品国产精品| 懂色av噜噜一区二区三区av| 91年精品国产| 日韩欧美精品在线视频| 国产精品美女久久久久久2018| 亚洲婷婷综合久久一本伊一区| 亚洲成av人片在www色猫咪| 麻豆成人在线观看| 97精品超碰一区二区三区| 在线电影一区二区三区| 国产日韩亚洲欧美综合| 亚洲最大色网站| 国产黄色成人av| 欧美日韩黄色一区二区| 亚洲国产精华液网站w| 亚洲444eee在线观看| 成人丝袜视频网| 91精品国产福利在线观看| 中文字幕一区二区三区精华液| 天天操天天色综合| 99久久精品费精品国产一区二区| 欧美一区二区三区精品| 亚洲少妇屁股交4| 精品写真视频在线观看| 欧美日韩专区在线| 国产精品久久久久桃色tv| 奇米色一区二区| 色偷偷一区二区三区| 国产婷婷色一区二区三区四区 | 日韩福利视频网| caoporm超碰国产精品| 日韩免费电影一区| 亚洲国产精品视频| 99精品国产99久久久久久白柏 | 国产一区二区电影| 欧美日韩大陆一区二区| **性色生活片久久毛片| 国产精品一区免费在线观看| 欧美精品九九99久久| 一区二区成人在线观看| 99精品热视频| 中文字幕日本乱码精品影院| 国产一区二区三区不卡在线观看 | 国产成人无遮挡在线视频| 91精品国产乱| 日本女优在线视频一区二区| 精品1区2区3区| 一区二区三区产品免费精品久久75| 成人午夜免费电影| 日韩在线观看一区二区| 在线成人高清不卡| 日韩黄色免费电影| 日韩写真欧美这视频| 日本视频在线一区| 欧美xfplay| 国模少妇一区二区三区| 久久精品夜色噜噜亚洲a∨| 国产一区二区0| 欧美激情综合网| 成人app软件下载大全免费| 中文字幕在线观看一区| 91香蕉视频污在线| 亚洲在线视频一区| 8x福利精品第一导航| 久久精品国产精品亚洲精品| 久久综合久久鬼色中文字| 国产一区二区三区四区在线观看| 久久精品人人做人人爽人人 | 亚洲欧美中日韩| 色av综合在线| 性久久久久久久| 精品日产卡一卡二卡麻豆| 国产高清精品久久久久| 成人免费在线视频| 欧美亚洲国产一区二区三区| 午夜视频久久久久久| 日韩免费观看高清完整版| 成人精品高清在线| 香蕉久久夜色精品国产使用方法| 日韩视频中午一区| www.色精品| 青青草国产精品97视觉盛宴| 久久精品夜色噜噜亚洲a∨| 97国产一区二区| 美女在线一区二区| 中文字幕制服丝袜成人av| 欧美日本高清视频在线观看| 国产麻豆精品久久一二三| 亚洲欧美乱综合| 精品日韩一区二区三区| 色悠悠久久综合| 精品一区二区三区视频在线观看 | 亚洲不卡一区二区三区| 久久久久久久久99精品| 日本乱人伦aⅴ精品| 麻豆免费精品视频| 亚洲欧美日韩成人高清在线一区| 欧美一区二区三区成人| 91在线丨porny丨国产| 久久精品国产亚洲5555| 亚洲成人在线免费| 国产精品国产三级国产有无不卡| 91精品欧美久久久久久动漫| a亚洲天堂av| 国产一区二区三区美女| 日韩国产欧美在线播放| 亚洲精品成人少妇| 国产精品青草久久| 久久在线免费观看| 91精品国产91久久久久久一区二区| 亚洲国产另类av| 91精品婷婷国产综合久久| 精品一二线国产| 免费欧美日韩国产三级电影| 亚洲人成7777| 亚洲精品成人在线| 亚洲国产日韩综合久久精品| 国产亚洲一区字幕| 精品成人佐山爱一区二区| 欧美日韩国产在线观看| 91久久免费观看| 91丨九色porny丨蝌蚪| 99综合电影在线视频| 麻豆高清免费国产一区| 蜜桃视频在线观看一区二区| 偷拍日韩校园综合在线| 亚洲国产美女搞黄色| 亚洲卡通动漫在线| 一区二区三区在线免费播放| 亚洲欧洲韩国日本视频| 国产精品久久久久久久久晋中| 久久精品人人做人人爽人人| 国产日韩影视精品| 亚洲视频在线观看一区| 亚洲成人动漫在线免费观看| 亚洲黄色av一区| 亚洲一区二区三区四区的| 一区二区三区中文在线| 亚洲综合色视频| 亚洲国产欧美日韩另类综合| 五月婷婷欧美视频| 日韩av午夜在线观看| 日韩成人午夜电影| 韩国精品在线观看| 福利91精品一区二区三区| 99久久亚洲一区二区三区青草| 91香蕉视频mp4| 在线看不卡av| 日韩一区二区影院| 国产欧美日韩精品在线| 中文字幕一区三区| 亚洲第一二三四区| 精品一区二区精品| 色综合久久综合网欧美综合网| 欧美在线视频日韩| 欧美大度的电影原声| 国产精品久久福利| 视频一区欧美精品| 国产精品白丝av| 在线观看www91| 欧美精品一区二区三区蜜桃| 国产精品二三区| 亚洲一区二区在线视频| 狠狠狠色丁香婷婷综合激情| bt7086福利一区国产| 欧美一级二级在线观看| 国产精品久久国产精麻豆99网站| 亚洲午夜久久久久久久久电影网 | 欧美激情资源网| 国产精品白丝jk黑袜喷水| 91免费版pro下载短视频| 在线综合亚洲欧美在线视频| 久久久www成人免费无遮挡大片| 综合激情网...| 国产最新精品免费|