latticepathcollection.h.svn-base
来自「解码器是基于短语的统计机器翻译系统的核心模块」· SVN-BASE 代码 · 共 98 行
SVN-BASE
98 行
// $Id$/***********************************************************************Moses - factored phrase-based language decoderCopyright (C) 2006 University of EdinburghThis library is free software; you can redistribute it and/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 2.1 of the License, or (at your option) any later version.This library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with this library; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA***********************************************************************/#pragma once#include <set>#include <iostream>struct CompareLatticePathCollection{ bool operator()(const LatticePath* pathA, const LatticePath* pathB) const { return (pathA->GetTotalScore() > pathB->GetTotalScore()); }};class LatticePathCollection{protected: std::multiset<LatticePath*, CompareLatticePathCollection> m_collection; std::set< std::vector<const Hypothesis *> > m_uniquePath; public: // iters typedef std::multiset<LatticePath*, CompareLatticePathCollection>::iterator iterator; typedef std::multiset<LatticePath*, CompareLatticePathCollection>::const_iterator const_iterator; iterator begin() { return m_collection.begin(); } iterator end() { return m_collection.end(); } const_iterator begin() const { return m_collection.begin(); } const_iterator end() const { return m_collection.end(); } ~LatticePathCollection() { // clean up RemoveAllInColl(m_collection); } //! add a new entry into collection void Add(LatticePath *latticePath) { const std::vector<const Hypothesis *> &edges = latticePath->GetEdges(); if ( m_uniquePath.insert(edges).second ) { // path not yet in collection m_collection.insert(latticePath); } else { // path already in there delete latticePath; } } size_t GetSize() const { return m_collection.size(); } void Detach(const LatticePathCollection::iterator &iter) { // delete from m_uniquePath as well const LatticePath *latticePath = *iter; const std::vector<const Hypothesis *> &edges = latticePath->GetEdges(); m_uniquePath.erase(edges); m_collection.erase(iter); }};inline std::ostream& operator<<(std::ostream& out, const LatticePathCollection& pathColl){ LatticePathCollection::const_iterator iter; for (iter = pathColl.begin() ; iter != pathColl.end() ; ++iter) { const LatticePath &path = **iter; out << path << std::endl; } return out;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?